我的解决方案中有多个项目使用相同 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>
端点之间的唯一区别是合同 - 由于服务引用添加了不同的名称。
我的问题是是否可能只有一个服务使用的端点?
(请注意,项目在其他解决方案中独立使用,因此将包含服务引用的包装器项目分解出来并不可行。)
答案 0 :(得分:1)
给出的评论,特别是@Tim的澄清解释了为什么我的两个项目都不可能使用相同的端点。如果其他任何人遇到这个问题并且确实需要解决它,那么似乎有两种可能的方法:
请注意,我正在使用'',因为以这种方式定义的'namespace'不是服务引用的完整命名空间,而是附加到添加了服务引用的项目的命名空间中。这意味着如果多个项目具有相同“命名空间”的服务引用,则不存在任何命名空间冲突。
在我的情况下,我无法采用方法1.但经过一番思考(并与其他代码所有者交谈)后,我能够通过简单地删除并重新创建其中一个服务引用来采用方法2。当然我可以离开它,在配置中为同一个webservice设置两个端点不是世界末日,但它看起来并不整洁。