在多个项目

时间:2016-01-19 17:20:06

标签: c# .net web-services wcf

我的解决方案中有多个项目使用相同 WCF服务。因此,它们每个都具有对WCF服务的服务引用。到目前为止一切顺利。

当这些服务组合到解决方案中时,他们自然会从exe的app.config获取服务模型。这是事情变得有趣的地方。即使两个服务引用都指向同一个WCF服务,看起来我需要公开两个端点:

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="SecureHttpBindingEndpoint">
      <security mode="Transport" />
    </binding>
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address=".../LocalAuthentication.svc" binding="basicHttpBinding" bindingConfiguration="SecureHttpBindingEndpoint" contract="Webservice1.ILocalAuthentication" name="SecureHttpBindingEndpoint" />
  <endpoint address=".../LocalAuthentication.svc" binding="basicHttpBinding" bindingConfiguration="SecureHttpBindingEndpoint" contract="WebService2.ILocalAuthentication" name="SecureHttpBindingEndpoint" />
</client>

端点之间的唯一区别是合同 - 由于服务引用添加了不同的名称。

我的问题是是否可能只有一个服务使用的端点?

(请注意,项目在其他解决方案中独立使用,因此将包含服务引用的包装器项目分解出来并不可行。)

1 个答案:

答案 0 :(得分:1)

给出的评论,特别是@Tim的澄清解释了为什么我的两个项目都不可能使用相同的端点。如果其他任何人遇到这个问题并且确实需要解决它,那么似乎有两种可能的方法:

  1. 创建一个实际包含服务引用的Wrapper项目,并让其他项目使用该项目。
  2. 重命名项目中的服务引用,使它们具有相同的“命名空间”。定义服务引用时,您可以指定“名称空间”,该名称空间用作端点中的限定名称。如果两个项目都具有相同的“命名空间”,那么它们可以使用相同的端点。
  3. 请注意,我正在使用'',因为以这种方式定义的'namespace'不是服务引用的完整命名空间,而是附加到添加了服务引用的项目的命名空间中。这意味着如果多个项目具有相同“命名空间”的服务引用,则不存在任何命名空间冲突。

    在我的情况下,我无法采用方法1.但经过一番思考(并与其他代码所有者交谈)后,我能够通过简单地删除并重新创建其中一个服务引用来采用方法2。当然我可以离开它,在配置中为同一个webservice设置两个端点不是世界末日,但它看起来并不整洁。