我们可以将多个服务行为附加到WCF中的同一服务。如果我们可以这样做 - 通过配置文件还是作为属性?
答案 0 :(得分:3)
是的,你可以。
ServiceEndpoint 有一个行为集合。 因此,如果您使用C#代码创建服务,则可以向此集合添加任何行为:标准或您的行为。如何创建自定义行为并将其添加到endpoint see here的示例。请记住,您可以根据需要创建和添加任意数量的行为。
如果要在配置中添加行为,则需要创建行为配置扩展。 Here is an example hot to create it并将其添加到配置文件中的端点。
修改强>
答案 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