如何使用多个服务行为暴露单个WCF服务?

4
我有一个 WCF 服务,需要满足以下要求:
  1. 端点1:应该使用带有 Windows 身份验证的 netTCP 绑定。
  2. 端点2:应该使用带有自定义用户名称和密码验证的 netTCP 绑定。
我能够通过创建两个服务行为来单独完成这两个要求,一个用于 Windows 身份验证,另一个用于用户名和密码,但这样我必须暴露两个服务来实现上述功能。我正在寻找一种方式,只能公开一个服务,并通过不同的端点配置,实现要求。
代码片段和配置将非常有帮助。

1
我认为你做不到 - 虽然你正在使用相同的绑定(NetTcp),但你实现它们的方式不同,因此实际上你有两个绑定。因此你有两个服务。你可能可以通过在代码中切换绑定来实现它,但一旦服务被实例化,绑定就被设置了。 - Tim
第二个 @Tim。我认为你应该把它写成一个答案。 - Jeroen
好的... 如果没有一种方法可以使用单个服务来完成这项任务,那么是否有一种方法可以通过单个svc.cs文件来实现。配置将使得单个服务在不同的端点上具有不同的服务行为。 - Rishabh Verma
@Tim 不要混淆终结点和服务。一个终结点只能有一个绑定,但是一个服务可以有多个终结点,每个终结点都有自己的绑定。 - Kirk Broadhurst
可能是重复的问题:WCF服务使用两种绑定类型为两个不同的客户端提供服务 - Kirk Broadhurst
@KirkBroadhurst - 您是正确的。我误解了问题 - 我以为OP试图通过两个不同的绑定在一个单一端点中公开单个服务,因此发表了我的评论。这就是我在半睡半醒时阅读问题的结果 :) - Tim
1个回答

2
这是WCF支持的一种场景,一个接口作为两个不同的终结点暴露出来。它们将拥有两个不同的地址,但将指向相同的代码。
<service 
    name="Microsoft.ServiceModel.Samples.CalculatorService"
    behaviorConfiguration="CalculatorServiceBehavior">
    <!-- This endpoint is exposed at the base address provided by host:       http://localhost/servicemodelsamples/service.svc  -->
   <endpoint address=""
        binding="basicHttpBinding"
        contract="Microsoft.ServiceModel.Samples.ICalculator" />
   <!-- secure endpoint exposed at {base address}/secure:       http://localhost/servicemodelsamples/service.svc/secure -->
  <endpoint address="secure"
        binding="wsHttpBinding"
        contract="Microsoft.ServiceModel.Samples.ICalculator" />
  ...
</service>

请查看: http://msdn.microsoft.com/en-us/library/ms751515.aspx

很抱歉,这样做可能行不通。我有两种不同的服务行为。它们都使用TCP绑定,一个用于Windows身份验证,另一个用于自定义身份验证。我想要的是一种配置方式,可以在不同的端点上使用相同的svc.cs文件,并具有不同的服务行为。 - Rishabh Verma
1
您可以在端点级别覆盖行为配置,并具有具有相同绑定的2个端点,请参见:https://dev59.com/_lrUa4cB1Zd3GeqPhTDZ - Shiraz Bhaiji
你能否发布符合上述要求的代码片段?我已经准备好了绑定。比如,服务行为1 =“WindowsAuthenticatedBehavior”,使用netTCPWindowsAuthenticated绑定;服务行为2 =“CustomUserNameBehavior”,使用netTCPUserName绑定。我的服务在service.svc.cs文件中实现了IService.cs接口。你能否发布一个能够满足我的需求的代码片段? - Rishabh Verma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接