【问题标题】:Biztalk - Consuming WCF via an external assemblyBiztalk - 通过外部程序集使用 WCF
【发布时间】:2016-09-05 09:09:02
【问题描述】:

我有一个 WCF 服务,它被引用到程序集中。此程序集已在 BizTalk 项目中引用。 通过 Orchestration 调用 WCF 方法时,出现以下错误: 在 ServiceModel 客户端配置部分中找不到引用合同“SubscriberService.ISubscriber”的默认端点元素。

我已经用 google 搜索过了,如果您尝试通过 Window 项目或 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>

谢谢

【问题讨论】:

    标签: wcf biztalk .net-assembly


    【解决方案1】:

    因为这是一个 BizTalk 项目,所以答案以不要这样做开头。

    虽然可以,但这不是在 BizTalk 应用程序中调用服务的正确方法。

    因此,解决此问题的正确方法是使用 BizTalk WCF 适配器将该服务添加到您的应用中。

    如果您团队中的任何人提出任何异议,我们很乐意帮助您解决这些问题。不存在您所描述的情况是正确的做法。

    【讨论】:

    • 我同意,您应该通过发送端口调用 WCF 服务。
    • 非常同意约翰斯的观点。我曾经遇到过一个解决方案,他们使用外部程序集从 BizTalk 调用 Web 服务。这导致了各种问题,因为它不是多线程安全的,也没有正确处理异常(它只是将异常有效负载传回而不引发异常)。当我从客户那里得到预算时,它被替换为 BizTalk 发送端口,并且 .net 项目被吐司。
    • 出于性能原因,我看到从 BizTalk 调用服务的方式是为了避免在编排中创建持久性点。
    • @OlegDeribas 还有其他方法可以限制持久点的数量。
    • 此外,通过删除该持久点,您实际上是在删除保证消息传递的能力,这是 BizTalk 的主要功能之一。
    猜你喜欢
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多