2011-09-07 61 views
1

我有一個Web服務,需要從BizTalk業務流程中使用。 我在BizTalk使用我定義的消息架構,它們看起來像如何從BizTalk 2010中使用WCF服務

<?xml version="1.0" encoding="utf-16"?> 
    <xs:schema 
     xmlns:mstns="http://tempuri.org/XMLSchema.xsd" 
     xmlns="http://www.myapp.com/schemas/IntegrationApplication-instance" 
     xmlns:b="http://schemas.microsoft.com/BizTalk/2003" 
     xmlns:ns0="https://DTIB.PropertySchema" 
     elementFormDefault="qualified" 
     targetNamespace="http://www.myapp.com/schemas/IntegrationApplication-instance" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
     <xs:include schemaLocation=".\CommonTypes.xsd" /> 
     <xs:element name="ProviderRequest"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="Header" type="HeaderType" /> 
      <xs:element name="Parameters" type="ParametersType" /> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
    </xs:schema> 

在WCF服務,我已方法,如

public ProviderResponse Provide(ProviderRequest providerRequest) {...} 

其中ProviderRequest就像

 [DataContract(Namespace = "http://www.myapp.com/schemas/IntegrationApplication-instance")] 
     public class ProviderRequest 
     { 
      [DataMember] 
      public Header Header { get; set; } 

      [DataMember] 
      public Parameter[] Parameters { get; set; } 
     } 

定義的定義當我創建發送端口並嘗試發送ProviderRequest消息時,它會失敗並顯示不同的錯誤。

使用與BizTalk項目中定義的相同架構的WCF服務的最佳方法是什麼?

回答

1

最好的辦法是運行一個服務實例,然後從Visual Studio中「添加生成的項目」 - >「使用WCF服務」。

這將生成您的服務消息XSD和端口類型,並且是一種低摩擦的方式來執行您正在嘗試執行的操作。

+0

我嘗試過這樣,它給了我一個錯誤「執行接收管道失敗:」Microsoft.BizTalk.DefaultPipelines.XMLReceive,Microsoft.BizTalk.DefaultPipelines,版本= 3.0.1.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35「來源: 「XML反彙編程序」接收端口:「WcfReceivePort_BizTalkWcfService/Provider」URI:「/BizTalkWcfService/Provider.svc」原因:由於多個模式與消息類型匹配,無法找到文檔說明「。當我在XMLReceive管道屬性中打開「允許無法識別的消息」選項時,它纔會起作用 –

+0

@Javos - 這是一個版本控制問題。您有兩個程序集中定義了相同的消息,因此當BizTalk嘗試將您的xml反序列化爲消息時,它不知道要使用哪一個。這是不好的做法,可能會導致運行時失敗,因此您應該從一個或另一個程序集中刪除消息定義。請注意,這些程序集不一定是同一個BizTalk應用程序的一部分。 –

+0

好的,但是如果我想在我的系統之間使用共享消息模式,那麼我應該怎麼做? –

0

非常有趣的問題,可能發生在別人身上的情景。

這裏有一些建議。

最常見的情況:需要消耗一個服務,並希望使用這些消息 - 使用休的建議「添加生成的項...」

不常見的情況:您已經創建了一個模式,一個服務也使用(下同) - 使用休的建議「添加生成的項...」 - 刪除是重複的模式,無論是自己的還是從創建

不那麼常見的情況:你想消費使用相同的架構 兩個服務 - 使用休的建議「添加生成的項...」 - 刪除是從生成

也從沒發生在我身上案件之一的重複模式:你已經創建了一個服務也使用的模式(不是相同的,但是相同的根名稱和名字空間) - 沒有什麼可做的,這是行不通的(開箱即用)