利用 WCF 接收配接器發佈 WCF 服務的考量
本主題將提供您利用 WCF 接收配接器來發佈 WCF 服務時應該納入考量的相關資訊。 使用 WCF 配接器發佈服務後,WCF 用戶端將能夠把該服務當成一般 WCF 服務來呼叫。
內含式裝載
在BizTalk Server進程空間內裝載接收位置,btsntsvc.exe,可簡化開發和部署的優點。 此外,它會建立比在 IIS 中裝載更多的主機實例,以利用BizTalk Server的高可用性和負載平衡功能。 如需在 IIS 中裝載BizTalk Server進程外的資訊,請參閱設定隔離 WCF 接收配接器的 IIS。
將與 WCF 配接器一起發佈的 WCF 服務的 IsOneWay 屬性設定為 false,WCF-NetMsmq 接收配接器除外) (
與 WCF 配接器一起發行之 WCF 服務的 System.ServiceModel.OperationContractAttribute.IsOneWay 屬性除外,除了使用設定為 true 之 WCF-NetMsmq 接收配接器發佈的服務之外,即使單向接收位置也會設定為 false 。 如果 IsOneWay 屬性設定為 false,則即使傳回 void 的方法會導致回復訊息。 在此情況下,基礎結構會建立並傳送空白訊息,向呼叫者指出方法已傳回 使用這種方法時,基礎結構就會將服務作業擲出的例外狀況傳回給用戶端。
若要取用 WCF 配接器所發行的 WCF 服務 (除了 IsOneWay 為 false的 WCF-NetMsmq 接收配接器) 之外,用戶端上的 IsOneWay 屬性必須設定為 false ,如下所示:
[ServiceContract(Namespace="Microsoft.WCF.Documentation")]
public interface ISampleService{
[OperationContract(IsOneWay=false, ReplyAction="*",Action="…"]
string SampleMethod(string msg);
}
注意
因為 IsOneWay 屬性的預設值為 false,所以您不需要在程式碼中指定 屬性。
若是在使用透過單向接收位置發佈的 WCF 服務,用戶端上 OperationContractAttribute 的 ReplyAction 屬性應該要設為 "*" (星號)。
System.ServiceModel.OperationContractAttribute.ReplyAction屬性的System.ServiceModel.OperationContractAttribute可用於用戶端,以指定 WCF 服務回應訊息的 SOAP 動作值。
除了為回復訊息的動作標頭指定特定值, (通知用戶端這是回復,以及要採取哪些動作) ,您也可以指定字串 「*」 (星號) 。 在用戶端應用程式中指定星號,就會指示該用戶端不要驗證該服務所傳送回應訊息中的回覆動作。
若要取用由單向接收位置發佈的 WCF 服務,WCF 服務的 Proxy 方法必須傳回 void,在此情況下,Proxy 方法預期 WCF 服務會傳送空的訊息,以向呼叫端指出方法已傳回。 若要讓 Proxy 方法接收這個空白訊息,OperationContractAttribute的ReplyAction屬性應該設定為 「*」, (星號) ,如下所示:
[ServiceContract(Namespace="Microsoft.WCF.Documentation")]
public interface ISampleService{
[OperationContract(IsOneWay=false, ReplyAction="*",Action="…"]
string SampleMethod(string msg);
}
注意
您不需要將 ReplyAction 屬性設定為 「*」, (WCF-NetMsmq 配接器的星號) ,因為 WCF-NetMsmq 配接器需要 WCF 用戶端將 IsOneWay 屬性設定為 true。
外掛式主控件執行個體只能執行一個配接器:
外掛式主控件執行個體只能執行一個配接器。 若是使用單一外掛式主控件設定多個隔離之配接器 (例如,HTTP 和 SOAP 和 WCF 配接器) 的接收處理常式,您就必須建立多個應用程式集區,讓每個配接器使用一個應用程式集區。 如需 BizTalk 隔離主機的詳細資訊,請參閱 啟用 Web 服務。
傳送非 XML 內容為回應訊息時,使用範本 -- 由範本指定的內容選項
具有本文的 WCF 配接器 -- BizTalk 回應訊息本文 (預設值) 選項不允許傳送非 XML 訊息,例如字元資料和點陣圖影像。 您可以使用 範本 -- WCF 配接器範本選項所指定的內容 來傳送非 XML 訊息。 如需如何使用範本的詳細資訊,請參閱 指定 WCF 配接器的訊息本文。
設定透過 WCF 服務發佈精靈所發佈 WCF 服務的權限
在 Windows Server 2008 SP2 或 Windows Server 2008 R2 平臺上使用以 WCF 服務發佈精靈建立的 ASP.NET 應用程式時,可能會發生與在 WCF 服務調用期間存取 DLL 相關的錯誤。 這些錯誤通常與預設 Windows Server 2008 SP2 和 Windows Server 2008 R2 安全性的問題有關。 如需這些錯誤的詳細資訊,請參閱説明及支援網站上的説明和支援網站上 https://go.microsoft.com/fwlink/?LinkId=43659 名為「您收到「System.IO.FileNotFoundException」錯誤的錯誤。
無論是由內含式主控件或是外掛式主控件來執行服務,BizTalk Server 都會要求執行 WCF 服務的處理必須獲得適當的權限。 在 Windows Server 2008 SP2 和 Windows Server 2008 R2 下,隔離主機的預設 Windows 群組是隔離主機使用者群組,因此將許可權新增至隔離主機使用者群組應該可以解決此問題。
若要加入外掛式主控件使用者群組的權限
在 [Microsoft Windows 檔案總管] 中,找出 %windir%\temp 目錄。
以滑鼠右鍵按一下 %windir%\temp,然後按一下 [ 屬性]。
在 [ 屬性 ] 對話方塊中,按一下 [ 安全性 ] 索引標籤。
按一下 [新增],選取 [隔離主機使用者群組],然後按一下 [ 確定]。
設定具 WCF-NetMsmq 配接器之 WCF 接收位置的權限
當使用 NetMsmqBinding 的 WCF 用戶端將訊息傳送到透過 WCF-NetMsmq 配接器所發佈 WCF 服務時,該用戶端會將訊息定址至目標佇列,也就是由服務佇列管理員管理的佇列。 用戶端上的佇列管理員會將訊息傳送至傳輸 (或傳出) 佇列。 傳輸佇列是用戶端的佇列管理員,會儲存傳輸至目標佇列的訊息。
針對定址至服務之所有目標佇列的訊息,服務的佇列管理員會接受並加以儲存。 接著,服務會要求讀取目標佇列,佇列管理員再將訊息傳遞至服務。 因此,裝載接收位置的 BizTalk 主控件執行個體服務帳戶,應擁有從目標佇列進行讀取的權限。
使用空白內文路徑運算式接收 SOAP 訊息,其 SOAP Body 項目內容中含字元資料
若要讓 WCF 接收配接器從傳入回應訊息建立 BizTalk 訊息,其中包含 SOAP Body元素內容中的字元資料,如下列範例所示,您應該在 WCF 配接器傳輸屬性對話方塊的 [訊息] 索引標籤上將 [本文路徑運算式] 文字方塊保留空白。
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
...
</s:Header>
<s:Body>Contoso</s:Body>
</s:Envelope>
如果您選取 [信封 ] 或 [ 本文 ] 選項,配接器就無法從先前的內送訊息建立 BizTalk 訊息。 訊息不會遭擱置,因為輸入 SOAP 封送處理時失敗的訊息不會遭擱置。 如需如何在 [ 訊息 ] 索引標籤上使用本文路徑運算式的詳細資訊,請參閱 指定 WCF 配接器的訊息本文。
注意
設定 BTSNTSvc.exe.config. 檔,即可使用 Windows SDK 內的 TraceViewer 工具 (SvcTraceViewer.exe)。 For more information about the Windows SDK, see "What's New in the Windows SDK" at https://go.microsoft.com/fwlink/?LinkId=75219. For more information about the TraceViewer tool, see "TraceViewer Tool (SvcTraceViewer.exe)" at https://go.microsoft.com/fwlink/?LinkId=75218.
使用參考其他結構描述的結構描述
當您的架構變得很大且複雜時,可以使用 重新定義、 包含和 匯 入元素,或當代表不同類型實例訊息的架構有一些共通的部分時。 將較小的結構描述,組合成最後會定義打算用來與交易夥伴交換之執行個體訊息之結構的結構描述,是一種很有用的做法。 您可以使用「BizTalk WCF 服務發佈精靈」,將這些結構描述發佈為 WCF 服務。
您應該使用「BizTalk WCF 服務使用精靈」,建立從 BizTalk 專案中使用 WCF 服務時所需要的 BizTalk 成品。 若要從 .NET 應用程式使用 WCF 服務,您應該要使用 ServiceModel Metadata Utility 工具 (Svcutil.exe),建立該 WCF 服務適用的 Proxy 類別。 如需如何使用參考其他架構之架構的詳細資訊,請參閱 使用其他架構的架構 和 如何建立使用其他架構的架構。 For more information about Svcutil.exe, see "Service Model Metadata Utility Tool (Svcutil.exe)" at https://go.microsoft.com/fwlink/?LinkID=74696.
下表針對配合會應用到其他結構描述之結構描述所發佈的 WCF 服務,列出這類服務在使用時要注意到的限制和考量。
XML 結構描述項目 | 使用透過 BizTalk WCF 服務發佈精靈所發佈的 WCF 服務 | 使用 .NET 應用程式所裝載的 WCF 服務 |
---|---|---|
<import> | BizTalk WCF 服務使用精靈和 Svcutil.exe 皆支援 | BizTalk WCF 服務使用精靈和 Svcutil.exe 皆支援 |
<include> | 支援 BizTalk WCF 服務取用精靈和 Svcutil.exe 注意: 建立 Proxy 類別時,Svcutil.exe 可能會引發警告訊息。 | 支援 BizTalk WCF 服務取用精靈和 Svcutil.exe 注意: 建立 Proxy 類別時,Svcutil.exe 可能會引發警告訊息。 |
<定義> | - 支援 BizTalk WCF 服務取用精靈 - 受 Svcutil.exe 限制支援 注意: Svcutil.exe 重新定義 元素的限制與 XSD.exe 相同。 |
支援 BizTalk WCF 服務取用精靈和 Svcutil.exe 注意: 建立 Proxy 類別時,Svcutil.exe 可能會引發警告訊息。 |
注意
Svcutil.exe 針對已發行的 BizTalk WCF 服務建立 Proxy 類別時,可能會使用 include 和 redefine 元素,引發警告訊息。 例如,「已經宣告全域項目」。
確定在您變更服務端點位址中的電腦名稱部分之後,內含式 WCF 接收位置未遭停用
如果您在執行中進程 WCF 接收位置的 [位址 (URI) ] 文字方塊中變更電腦名稱稱部分,建議您使用 BizTalk 管理主控台來檢查接收位置是否仍在執行中。 例如,如果您使用 WCF-NetTcp 接收配接器net.tcp:// <您的電腦名稱稱> /samplepath將服務端點位址變更為net.tcp://localhost/samplepath,接收位置可能會停用Service.InvalidOperationException。 如果您只變更服務端點位址的電腦名稱部分而不修改路徑部分,請確定該接收位置未遭停用,並在必要情況下啟用該位置。
在透過交易通訊協定和遠端 WCF 接收位置通訊的用戶端電腦上設定適當的 MSDTC 安全性組態選項
WCF-NetTcp、WCF-WSHttp 和 WCF-NetNamedPipe 接收配接器可以參與 WCF 用戶端使用 WS-AtomicTransaction 和 OleTransaction 交易通訊協定所管理的交易協調程式。 在交易內容中使用這些交易通訊協定,即可將訊息傳輸到目的接收位置,以及從 MessageBox 資料庫中加以刪除。
若要使用交易通訊協定與遠端 WCF 接收位置通訊,您必須在 WCF 用戶端電腦上適當地設定 MSDTC 安全性 設定選項。 下表列出 MSDTC 安全性組態 對話方塊中可用選項的必要值:
組態選項 | 預設值 | 建議值 |
---|---|---|
網路 DTC 存取 | 已停用 | 啟用 |
允許輸出 | 已停用 | 啟用 |
需要相互驗證 | 啟用 | 如果對應的遠端接收位置正在執行 Windows Server 2003 SP1 或 SP2,並設定 為需要相互驗證,則為啟用。 |
要求對連入呼叫者驗證 | 已停用 | 如果在叢集上執行 MSDTC,則為「已啟用」。 |
在套用這些變更後,您必須重新啟動 MSDTC 服務。
若要存取 [MSDTC 安全性設定 ] 對話方塊,請遵循下列步驟:
按一下 [開始],按一下 [ 執行],然後輸入 dcomcnfg 以啟動 元件服務 管理主控台。
依序展開[元件服務]、[電腦]、以滑鼠右鍵按一下 [我的電腦],然後按一下 [內容]。
在 [ 我的電腦屬性 ] 對話方塊中,按一下 [MSDTC ] 索引標籤,然後按一下 [ 安全性 設定] 以顯示 [ 安全性 設定] 對話方塊。
使用 BizTalk WCF 服務發佈精靈時之 SOAP 包裝函式的說明
使用 WCF 服務發佈精靈將協調流程公開為 Windows Communication Foundation (WCF) 服務時,會產生包裝函式。 這個包裝函式會在傳送訊息的 XML 訊息中使用埠的方法名稱。 此包裝函式是 Microsoft SOAP 信封的預設值。 它可讓 WCF 將多部分 SOAP 訊息包裝在一個 WCF 訊息中,由配接器傳送至端點。
最佳做法是,傳送者應該使用包裝函式,而接收者應該預期它,或者傳送者不應該使用包裝函式,而接收者應該預期原始 WCF 訊息。 若未事先同意是否要使用包裝函式,可能會導致傳送內容與接收專案之間的不相容問題。