2013-07-25 97 views
1

未來我試圖構建在BizTalk消息發送到Web服務時犯規出現在HTTP流量。當我打電話從C#我看交通(從小提琴手)的Web服務作爲基本的:肥皂頭從BizTalk

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
     <h:AuthenticationInfo xmlns:h="urn:Ticket" xmlns="urn:Ticket" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
      <userName>user_name</userName> 
      <password>password</password> 
      <authentication/> 
      <locale/> 
      <timeZone/> 
     </h:AuthenticationInfo> 
    </s:Header> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <CreateTroubleTicket xmlns="urn:Ticket"> 
      <ServiceID>asd</ServiceID> 
      <ServiceType>service Type</ServiceType> 
      <Impact>1</Impact> 
      <Priority>1 - Critical</Priority> 
     </CreateTroubleTicket> 
    </s:Body> 
</s:Envelope> 

,這將返回預期的響應。我在網上找到了關於如何在BizTalk中工作的說明,即。添加肥皂標題(http://threaddump.blogspot.com/2005/01/how-to-send-soap-headers-in-biztalk.htmlhttp://www.apress.com/9781430232643,其中有一個演練和第2.13章的代碼),並且我已經跟隨它們。不過,我無法創建您在上面看到的標題。當biz發送給Web服務時,我只看到身體通過小提琴手來;

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><ns0:CreateTroubleTicket xmlns:ns0="urn:Ticket"> 
    <ns0:ServiceID>ServiceID_0</ns0:ServiceID> 
    <ns0:ServiceType>ServiceType_0</ns0:ServiceType> 
    <ns0:Impact>1</ns0:Impact> 
    <ns0:Priority>1 - Critical</ns0:Priority> 
</ns0:CreateTroubleTicket></s:Body></s:Envelope> 

我可以得到分配給我想要的字符串的提升屬性。我知道這是因爲當我看着我的暫停消息(它未能從服務一個合法的響應之後),我看到我給它的消息上下文的值屬性:

enter image description here

要清楚我做了什麼來實現這一目標;我addded一個屬性架構與目標命名空間「http://schemas.microsoft.com/BizTalk/2003/SOAPHeader」,並命名爲「AuthenticationInfo」有其屬性架構文章設置爲「MessageContextPropertyBase」一個元素。我則在業務流程分配這消息作爲提升屬性:

MessageInwHeader(TempBizConsumeHeader.AuthenticationInfo)= @"<ns0:AuthenticationInfo xmlns:ns0=ur..." 

所以,如果有人看到了什麼在這裏或知道爲什麼我沒有看到實際上可以在請求這個頭讓我知道。也許我需要一個特殊的發送管道,或者我需要定義一個完整的信封?我認爲與WCF服務(我打電話不是),有一個現成的財產,WCFOutboundHeaders或一些這樣的事情。因爲有愛的id是那些我可以用一...

+0

如何連接到服務?爲什麼你需要看到肥皂信封? – RedEyedMonster

+0

當您'添加生成的項目'時,通過Biz生成的端口連接到它。在通過Biz發送時,我需要看到信封,以確保它通過C#調用時存在相同的標題(因爲調用適用於從C#調用但不是Biz的調用)。這個想法是獲得兩個信封(當通過C#調用,並通過Biz調用時)看起來相同。 – Jeyenne

回答

2

如果我理解正確的話,你要發送的消息具有自定義標題到web服務通過BizTalk發送端口。

還有就是內置名爲WCF.OutboundCustomHeaders財產,你應該使用它和你的財產的分配將是這樣的:

MessageInwHeader(WCF.OutboundCustomHeaders) = "<headers><h:AuthenticationInfo xmlns:h=\"urn:Ticket\" xmlns=\"urn:Ticket\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><userName>user_name</userName></h:AuthenticationInfo></headers>"; 

如果你要經常使用這些標題,也許你可以創建一些助手爲了這。

+0

感謝FCR做到了!當然,我曾嘗試過使用此屬性,但我的標題中的XML格式不正確,因此它沒有工作。 – Jeyenne