2016-09-05 32 views
0

我有一個WCF服務被引用到程序集中。此程序集已在BizTalk項目中引用。 通過Orchestration調用WCF方法時,它給出了以下錯誤: 無法找到在ServiceModel客戶端配置部分中引用合同'SubscriberService.ISubscriber'的默認端點元素。Biztalk - 通過外部組件消費WCF

我已經使用它,它是一個已知的問題,如果您嘗試在窗口項目或Web應用程序中通過程序集調用WCF。如果我們在調用程序集的項目中添加配置,可以解決這個問題。我測試了示例項目中的場景,並將客戶端配置複製到我的測試項目可以解決問題,但這在BIZTALK項目中不起作用。

配置中裝配的app.config文件:

<configuration> 

    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="CustomerMain.HelperAssembly.CoreProcess.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <system.serviceModel> 
    <protocolMapping> 
     <add binding="basicHttpBinding" scheme="http" /> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpBinding_ISubscriber" /> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:81/SubscriberService.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISubscriber" 
      contract="SubscriberService.ISubscriber" name="BasicHttpBinding_ISubscriber" /> 
    </client> 
    </system.serviceModel> 

</configuration> 

在BizTalk項目的app.config文件配置:

<configuration> 

    <system.serviceModel> 
    <protocolMapping> 
     <add binding="basicHttpBinding" scheme="http" /> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpBinding_ISubscriber" bypassProxyOnLocal="true" /> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:81/SubscriberService.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISubscriber" 
      contract="SubscriberService.ISubscriber" name="BasicHttpBinding_ISubscriber" /> 
    </client> 
    </system.serviceModel> 

</configuration> 

感謝

回答

1

因爲這是一個BizTalk項目,答案從開始不做是

雖然可以,但它並不是在BizTalk應用程序中調用服務的正確方法。

因此,解決此問題的正確方法是使用BizTalk WCF適配器將該服務添加到您的應用程序。

如果您的團隊中有人提出任何異議,我們很樂意幫助您解決這些問題。沒有任何情況下,你所描述的是正確的事情。

+0

我同意,你應該通過發送端口調用WCF服務。 – Gruff

+0

非常同意約翰。我曾遇到過一個解決方案,他們使用外部程序集來調用BizTalk的Web服務。這導致了各種問題,因爲它不是多線程安全的,也沒有正確處理異常(它只是通過異常有效負載而不引發異常)。當我從客戶那裏得到預算時,這被BizTalk發送端口取代,並且.net項目被烘烤了。 – Dijkgraaf

+0

爲了避免在編排中創建持久性點,我看到了出於性能原因從BizTalk調用這種方式的服務。 –