您可以透過程式設計方式或使用 BizTalk 管理控制台來設定 WCF-NetMsmq 接收位置。
設定屬性
BizTalk Explorer 物件模型可讓您以程序設計方式建立和設定接收位置。 BizTalk Explorer 物件模型會公開具有 TransportTypeData 讀取/寫入屬性的IReceiveLocation 接收位置組態介面。 這個屬性接受 WCF-NetMsmq 接收位置組態屬性包,格式為名稱/值組 XML 字串。 若要在 BizTalk Explorer 物件模型中設定此屬性,您必須設定 IReceiveLocation 介面的 InboundTransportLocation 屬性。
IReceiveLocation 介面的 TransportTypeData 屬性不需要設定。 如果未設定,WCF-NetMsmq 配接器會使用 WCF-NetMsmq 接收位置設定的預設值,如下表所示。
下表列出您可以在 WCF-NetMsmq 接收位置的 BizTalk Explorer 物件模型中設定的組態屬性。
| 屬性名稱 | 類型 | 說明 |
|---|---|---|
| 身分識別 | XML Blob 範例: <身份> <userPrincipalName value=“username@contoso.com” /> </身份> |
指定這個接收位置所提供的服務識別。 可以為 Identity 屬性指定的值會根據安全性組態而有所不同。 這些設定可讓客戶端驗證此接收位置。 Windows Communication Foundation(WCF)基礎結構會在用戶端和服務之間的交握過程中,確保預期的服務識別符合此元素的值。 預設值是空字串。 |
| OpenTimeout | System.TimeSpan | 指定一個時間間隔值,表示完成通道開啟操作所提供的時間間隔。 默認值:00:01:00 |
| SendTimeout | System.TimeSpan | 指定時間範圍值,指出傳送作業完成所提供的時間間隔。 默認值:00:01:00 |
| CloseTimeout | System.TimeSpan | 指定時間範圍值,指出通道關閉作業要完成的時間間隔。 默認值:00:01:00 |
| 最大接收訊息大小 | 整數 | 針對可在網路接收的訊息(包括標頭)指定大小上限,以位元組為單位。 訊息的大小會受限於為每個訊息配置的記憶體數量。 您可以使用此屬性來限制拒絕服務 (DoS) 攻擊的風險。 預設值:65536 |
| EnableTransaction | 布爾邏輯 | 指定消息佇列的類型:交易式或非交易式。 如果選取此屬性,則每個訊息只會傳遞一次,且傳送者會收到傳遞失敗的通知。 若要透過交易式傳送埠傳送訊息,用戶端的 持久 和 完全Once 綁定項都必須設定為 True。 如果清除此屬性,訊息會傳輸而不保證傳遞。
注意: 如果您在這個接收位置下使用交易式佇列,則必須選取此屬性。 默認值: False |
| OrderedProcessing | 布爾邏輯 | 指定是否要序列處理訊息。 選取這個屬性時,這個接收位置會配合 BizTalk 傳訊或協調流程傳送埠搭配使用時,這個接收位置會配合已排序的訊息傳遞,且該通訊埠已 將 [已排序傳遞 ] 選項設定為 True。 只有當 EnableTransaction 屬性設定為 True 時,才能選取此專案。如需 已排序遞送 選項的詳細資訊,請參閱「參考資料」中的相關主題。 當此屬性設定為 True 時,WCF-NetMsmq 接收位置會藉由建立配接器單個線程,將處理大型訊息時的資源使用量優化。 默認值: False |
| MaxConcurrentCalls | 整數 | 指定單一服務實例的並行呼叫數目。 超出限制的來電會排入佇列。 此屬性的範圍是從 0 到 Int32.MaxValue。 默認值:200 |
| SecurityMode | 列舉 - 沒有 - 消息 - 運輸 - 兩者 如需 SecurityMode 屬性成員名稱的詳細資訊,請參閱 UI 指引和開發人員 API 命名空間參考中 WCF-NetMsmq 傳輸屬性對話框、接收、安全性索引卷標的安全性模式屬性。 |
指定所使用的安全性類型。 預設值: 傳輸 |
| MsmqAuthenticationMode | 列舉 - 沒有 - WindowsDomain - 證書 如需 MsmqAuthenticationMode 屬性成員名稱的詳細資訊,請參閱 UI 指引和開發人員 API 命名空間參考中 WCF-NetMsmq 傳輸屬性對話框、接收、安全性索引標籤中的 MSMQ 驗證模式屬性。 |
指定 MSMQ 傳輸必須如何驗證訊息。 默認值: WindowsDomain |
| MsmqProtectionLevel | 列舉 - 無:沒有保護。 - 簽名:訊息已完成簽名。 - EncryptAndSign:訊息會加密並簽署。 若要使用此保護層級,您必須啟用 MSMQ 的 Active Directory 整合。 |
指定在 MSMQ 傳輸層級保護訊息的方式。 加密可確保訊息完整性,而簽署和加密可確保訊息完整性和非否認性。 預設值: Sign |
| MsmqSecureHashAlgorithm | 列舉 - MD5 - SHA1 - SHA25 - SHA512 |
指定要用於計算訊息摘要的哈希演算法。 如果 MsmqProtectionLevel 屬性設定為 None,則無法使用此屬性。 預設值: SHA1 |
| MsmqEncryptionAlgorithm | 列舉 - RC4Stream - AES |
指定在消息佇列管理員之間傳輸訊息時,用於網路訊息加密的演算法。 只有當 MsmqProtectionLevel 屬性設定為 EncryptAndSign 時,才能使用這個屬性。 默認值: RC4Stream |
| MessageClientCredentialType | 列舉 - 沒有 - Windows作業系統 - UserName - 證書 如需 MessageClientCredentialType 屬性成員名稱的詳細資訊,請參閱 UI 指引和開發人員 API 命名空間參考中 WCF-NetMsmq 傳輸屬性對話框、接收、安全性索引標籤中的 Message 用戶端認證類型屬性。 |
指定使用訊息式安全性執行客戶端驗證時要使用的認證類型。 默認值: Windows |
| AlgorithmSuite | 列舉 如需 AlgorithmSuite 屬性成員名稱的詳細資訊,請參閱 UI 指引和開發人員 API 命名空間參考中 WCF-NetMsmq 傳輸屬性對話框、接收、安全性索引卷標的 Algorithm suite 屬性。 |
指定訊息加密和金鑰包裝演算法。 這些演算法會對應至安全策略語言 (WS-SecurityPolicy) 規格中指定的演算法。 默認值: Basic256 |
| ServiceCertificate | 繩子 | 指定用戶端用來驗證服務時所用的接收位置之 X.509 憑證的指紋。 要用於此屬性的憑證必須安裝到 [目前使用者] 位置的 [我的存放區] 中。
注意: 您必須將服務憑證安裝到用戶帳戶的 目前使用者 位置,才能裝載此接收位置的接收處理程式。 預設值是空字串。 |
| InboundBodyLocation | 列舉 - UseBodyElement - 使用傳入訊息的 SOAP Body 元素內容來建立 BizTalk 訊息本文元件。 如果 Body 元素有多個子元素,則只有第一個元素會成為 BizTalk 訊息的本文部分。 - UseEnvelope - 從傳入訊息的整個 SOAP 信封 建立 BizTalk 訊息本文部分。 - UseBodyPath - 使用 InboundBodyPathExpression 屬性中的本文路徑表達式來建立 BizTalk 訊息本文部分。 針對傳入訊息的 SOAP Body 元素的直接子元素進行評估主體路徑表達式。 此屬性僅適用於請求-回應埠。 若需深入了解如何使用 InboundBodyLocation 屬性,請參閱 指定 WCF 配接器的訊息本文。 |
指定傳入 WCF 訊息之 SOAP Body 元素的數據選取範圍。 默認值: UseBodyElement |
| InboundBodyPathExpression | 繩子 如需如何使用 InboundBodyPathExpression 屬性的詳細資訊,請參閱 WCF 配接器屬性架構和屬性。 |
指定內文路徑表達式,以識別用來建立 BizTalk 訊息本文部分之傳入訊息的特定部分。 此本文路徑表達式會根據傳入訊息之SOAP Body 節點的直接子元素進行評估。 如果此本文路徑表達式傳回一個以上的節點,則 BizTalk 訊息本文部分只會選擇第一個節點。 如果 InboundBodyLocation 屬性設定為 UseBodyPath,則需要此屬性。 預設值是空字串。 |
| InboundNodeEncoding | 列舉 - Base64 - Base64 編碼。 - 十六進位 - 十六進位編碼。 - 字串 - 文字編碼 - UTF-8。 - XML - WCF 配接器會在 InboundBodyPathExpression 中,使用內文路徑表達式所選取節點的外部 XML 來建立 BizTalk 訊息本文。 |
指定 WCF-NetMsmq 接收配接器用來解碼 InboundBodyPathExpression 中所標識之主體路徑運算式的節點時所用的編碼類型。 如果 InboundBodyLocation 屬性設定為 UseBodyPath,則需要此屬性。 預設值: XML |
| 在失敗時停用定位功能 | 布爾邏輯 | 指定是否要停用因接收管線失敗或路由失敗而導致輸入處理失敗的接收位置。 默認值: False |
| SuspendMessageOnFailure | 布爾邏輯 | 指定是否要暫停因接收管線失敗或路由失敗而導致輸入處理失敗的要求訊息。 默認值: True |
| IncludeExceptionDetailInFaults | 布爾邏輯 | 指定是否要在傳回給用戶端的SOAP錯誤詳細數據中包含Managed 例外狀況資訊,以供偵錯之用。 默認值: False |
使用 BizTalk 管理控制台設定 WCF-NetMsmq 接收位置
您可以在 BizTalk 管理控制台中設定 WCF-NetMsmq 接收位置配接器變數。 如果未在接收位置設定屬性,則會使用 BizTalk 管理控制台中設定的預設接收處理程式值。
備註
完成下列程式之前,您必須先新增接收埠。 如需詳細資訊,請參閱 如何建立接收埠。
備註
WCF 用戶端和 WCF-NetMsmq 接收位置的系結組態必須相符。 如果它們不相符,WCF-NetMsmq 接收位置可能會遺失傳入訊息。
設定 WCF-NetMsmq 接收位置的變數
在 BizTalk 管理控制台中,依序展開 [ BizTalk Server系統管理]、[ BizTalk 群組]、[ 應用程式],然後展開您要建立接收位置的應用程式。
在 BizTalk 管理控制台的左窗格中,按兩下 [ 接收埠] 節點。 然後在右窗格中,以滑鼠右鍵按一下與現有接收位置相關聯的接收埠,或您想要與新的接收位置產生關聯的接收埠,然後按一下[屬性]。
在 [ 接收埠內容] 對話框的左窗格中,選取 [ 接收位置],然後在右窗格中按兩下現有的接收位置,或按兩下 [ 新增] 來建立新的接收位置。
在 [接收位置屬性] 對話方塊的 [類型] 旁的 [傳輸] 區段中,從下拉式清單中選取 [WCF-NetMsmq],然後按兩下 [設定]。
在 [WCF-NetMsmq 傳輸屬性 ] 對話方塊的 [ 一般 ] 索引標籤上,設定 WCF-NetMsmq 接收位置的端點地址和服務識別。 如需 [WCF-NetMsmq 傳輸屬性] 對話方塊中的 [一般] 索引標籤的詳細資訊,請參閱UI指引和開發人員 API 命名空間參考中的 [WCF-NetMsmq 傳輸屬性對話框、接收、一般] 索引標籤。
在 WCF-NetMsmq 傳輸屬性 對話方塊的 [繫結] 索引標籤上,設定逾時和交易屬性。 如需有關 系結 索引標籤在 WCF-NetMsmq 傳輸屬性 對話方塊中的詳細資訊,請參閱 UI 指引和開發人員 API 命名空間參考中的 WCF-NetMsmq 傳輸屬性對話框、接收、系結 索引標籤。
在 [WCF-NetMsmq 傳輸屬性 ] 對話方塊的 [ 安全性 ] 索引標籤上,定義 WCF-NetMsmq 接收位置的安全性功能。 如需 [WCF-NetMsmq 傳輸屬性] 對話方塊中 [安全性] 索引卷標的詳細資訊,請參閱UI指引和開發人員 API 命名空間參考中的 [WCF-NetMsmq 傳輸屬性對話框、接收、安全性] 索引標籤。
在 [WCF-NetMsmq 傳輸屬性 ] 對話方塊的 [ 訊息 ] 索引標籤上,指定 SOAP Body 元素的數據選取範圍。 如需 [WCF-NetMsmq 傳輸屬性] 對話方塊中 [訊息] 索引卷標的詳細資訊,請參閱 UI 指引和開發人員 API 命名空間參考中的 [WCF-NetMsmq 傳輸屬性對話框、接收、訊息] 索引標籤。
以程式化方式設定 WCF-NetMsmq 接收位置
您可以使用下列格式來設定屬性:
<CustomProps>
<ServiceCertificate vt="8" />
<InboundBodyLocation vt="8">UseBodyElement</InboundBodyLocation>
<InboundBodyPathExpression vt="8" />
<MessageClientCredentialType vt="8">Windows</MessageClientCredentialType>
<SendTimeout vt="8">00:01:00</SendTimeout>
<IncludeExceptionDetailInFaults vt="11">0</IncludeExceptionDetailInFaults>
<OpenTimeout vt="8">00:01:00</OpenTimeout>
<AlgorithmSuite vt="8">Basic256</AlgorithmSuite>
<MaxConcurrentCalls vt="3">16</MaxConcurrentCalls>
<SecurityMode vt="8">Transport</SecurityMode>
<OrderedProcessing vt="11">0</OrderedProcessing>
<CloseTimeout vt="8">00:01:00</CloseTimeout>
<MsmqEncryptionAlgorithm vt="8">RC4Stream</MsmqEncryptionAlgorithm>
<MaxReceivedMessageSize vt="3">2097152</MaxReceivedMessageSize>
<MsmqProtectionLevel vt="8">Sign</MsmqProtectionLevel>
<DisableLocationOnFailure vt="11">0</DisableLocationOnFailure>
<MsmqSecureHashAlgorithm vt="8">Sha1</MsmqSecureHashAlgorithm>
<SuspendMessageOnFailure vt="11">-1</SuspendMessageOnFailure>
<EnableTransaction vt="11">-1</EnableTransaction>
<InboundNodeEncoding vt="8">Xml</InboundNodeEncoding>
<MsmqAuthenticationMode vt="8">WindowsDomain</MsmqAuthenticationMode>
</CustomProps>
下列代碼段說明如何建立 WCF-NetMsmq 接收位置:
謹慎
此範例或指引會參考敏感性資訊,例如連接字串或使用者名稱和密碼。 請勿在程式代碼中硬式編碼這些值,並確定您使用最安全的驗證來保護機密數據。 如需詳細資訊,請參閱下列文件:
// Use BizTalk Explorer object model to create new WCF-NetMsmq receive location
string server = System.Environment.MachineName;
string database = "BizTalkMgmtDb";
string connectionString = string.Format("Server={0};Database={1};Integrated Security=true", server, database);
string transportConfigData = @"<CustomProps>
<InboundBodyLocation vt=""8"">UseBodyElement</InboundBodyLocation>
<UseSSO vt=""11"">0</UseSSO>
<Identity vt=""8"">
<identity>
<userPrincipalName value=""username@contoso.com"" />
</identity>
</Identity>
</CustomProps>";
//requires project reference to \Program Files\Microsoft BizTalk Server 2009\Developer Tools\Microsoft.BizTalk.ExplorerOM.dll
BtsCatalogExplorer explorer = new Microsoft.BizTalk.ExplorerOM.BtsCatalogExplorer();
explorer.ConnectionString = connectionString;
// Add a new BizTalk application
Application application = explorer.AddNewApplication();
application.Name = "SampleBizTalkApplication";
// Save
explorer.SaveChanges();
// Add a new one-way receive port
IReceivePort receivePort = application.AddNewReceivePort(false);
receivePort.Name = "SampleReceivePort";
// Add a new one-way receive location
IReceiveLocation receiveLocation = receivePort.AddNewReceiveLocation();
receiveLocation.Name = "SampleReceiveLocation";
// Find a receive handler for WCF-NetMsmq
int i = 0;
for(i=0; i < explorer.ReceiveHandlers.Count; ++i)
{
if("WCF-NetMsmq" == explorer.ReceiveHandlers[i].TransportType.Name)
break;
}
receiveLocation.ReceiveHandler = explorer.ReceiveHandlers[i];
receiveLocation.Address = "net.msmq://mycomputer/private/sampleQueue";
receiveLocation.ReceivePipeline = explorer.Pipelines["Microsoft.BizTalk.DefaultPipelines.PassThruReceive"];
receiveLocation.TransportType = explorer.ProtocolTypes["WCF-NetMsmq"];
receiveLocation.TransportTypeData = transportConfigData;
// Save
explorer.SaveChanges();
另請參閱
發行 WCF 接收器配接的服務元數據管理 BizTalk 主機和主機實例如何變更服務帳戶和密碼安裝 WCF 配接器的憑證指定 WCF 配接器的訊息本文設定 WCF-NetMsmq 配接器有序傳遞訊息在交易中傳送和擷取訊息消息佇列和 Active Directory公共和私人佇列