对WCF中相同服务的多重服务行为

时间:2015-11-06 10:16:49

标签: wcf wcf-data-services wcf-ria-services wcf-binding wcf-security

我们可以将多个服务行为附加到WCF中的同一服务。如果我们可以这样做 - 通过配置文件还是作为属性?

3 个答案:

答案 0 :(得分:3)

是的,你可以。

ServiceEndpoint 有一个行为集合。 因此,如果您使用C#代码创建服务,则可以向此集合添加任何行为:标准或您的行为。如何创建自定义行为并将其添加到endpoint see here的示例。请记住,您可以根据需要创建和添加任意数量的行为。

如果要在配置中添加行为,则需要创建行为配置扩展Here is an example hot to create it并将其添加到配置文件中的端点。

修改

服务行为 can be added in absolute same way

答案 1 :(得分:1)

是的,你可以。 您需要配置行为,并在服务标签中配置每个行为,如下所示:

<service 
    name="Microsoft.ServiceModel.Samples.CalculatorService"
    behaviorConfiguration="CalculatorServiceBehavior">
  <!-- First behavior:
       http://localhost/servicemodelsamples/service.svc  -->
  <endpoint address=""
            binding="basicHttpBinding"
            contract="Microsoft.ServiceModel.Samples.ICalculator" />
  <!-- Second behavior, with secure endpoint exposed at {base address}/secure:
       http://localhost/servicemodelsamples/service.svc/secure -->
  <endpoint address="secure"
            binding="wsHttpBinding"
            contract="Microsoft.ServiceModel.Samples.ICalculator" />
</service>

针对两种不同行为的ICalcular服务。

在此处阅读更多内容:https://msdn.microsoft.com/en-us/library/ms751515.aspx

答案 2 :(得分:0)

是我们可以创建多个终点

<services>
  <service name="ReportService.ReportService">       
    <endpoint 
           address="ReportService"  
           binding="netTcpBinding"           
           contract="ReportService.IReportService">
    </endpoint>
     <endpoint 
           address="ReportService"  
           binding="basicHttpBinding"           
           contract="ReportService.IReportService">
    </endpoint>        
  </service>
</services>

我们可以像这样创建多个端点。在客户端app.config或webconfig文件中它显示如下

<bindings>
        <netTcpBinding>
            <binding name="netTcpBinding_IReportService" />
        </netTcpBinding>

        <basicHttpBinding>
            <binding name="basicHttpBinding_IReportService" />
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="" binding="netTcpBinding"
            bindingConfiguration="netTcpBinding_IReportService" contract="ServiceReference.IReportService"
            name="netTcpBinding_IReportService">                
        </endpoint>

        <endpoint address="" binding="basicHttpBinding"
            bindingConfiguration="basicHttpBinding_IReportService" contract="ServiceReference.IReportService"
            name="basicHttpBinding_IReportService">                
        </endpoint>
    </client>

然后我们在提到

时应该提到绑定名称
      ServiceReference.ReportServiceClient client = new ServiceReference.ReportServiceClient(netTcpBinding_IReportService); 

现在它可以使用netTcpBinding