gpt4 book ai didi

c# - WCF 服务在 2 个不同的服务契约(Contract)上公开 2 个端点

转载 作者:太空狗 更新时间:2023-10-29 20:24:43 24 4
gpt4 key购买 nike

我有一个 WCF 服务,我正在尝试对其进行配置,以便它在不同的 URL 下公开 2 个端点,引用不同的功能。

我想要的是Service1,暴露方法A、B、C,而Service2,暴露方法D、E。我希望能够浏览 localhost/WebServiceName/Service1/Service.svclocalhost/WebServiceName/Service2/Service.svc

引用 localhost/WebServiceName/Service1/Service.svc 的其他应用程序应该只看到包含方法 A、B 和 C 的接口(interface)。他们不应该看到任何关于 Service2 的内容界面。对于 Service2 也是如此。

到目前为止,我已经在我的 WCF 服务中定义了两个接口(interface),I_Service1I_Service2

我在我的 web.config 中添加了两个端点,如下所示:

<endpoint address="http://localhost/WebServiceName/Service1/" binding="wsHttpBinding" contract="WebServiceName.I_Service1" bindingConfiguration="Binding1" />
<endpoint address="http://localhost/WebServiceName/Service2/" binding="wsHttpBinding" contract="WebServiceName.I_Service2" bindingConfiguration="Binding2" />

在 enpoint 中使用完整地址的建议来自这里:Multiple endpoints under IIS

但是,我仍然无法浏览 localhost/WebServiceName/Service1/Service.svc。我收到:

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

我可以成功浏览 localhost/WebServiceName/Service.svc 并且 wsdl 包括方法 A、B、C、D、E。但这在我想要的行为中应该是错误的。

有什么我遗漏的吗?

更新:关注本文 http://allen-conway-dotnet.blogspot.ro/2011/09/exposing-multiple-binding-types-for.html我为这些端点创建了两个不同的契约(Contract)服务。但目前我在浏览它时只看到 Service1Service2 显然不存在(出现 HTTP 404 错误相关问题)。

配置如下:

<services>
<service behaviorConfiguration="WebServiceName.ServiceBehavior1" name="WebServiceName.Service1">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="Binding1"
contract="WebServiceName.I_Service1" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/WebServiceName/Service1/Service.svc" />
</baseAddresses>
</host>
</service>
<service behaviorConfiguration="WebServiceName.ServiceBehavior2" name="WebServiceName.Service2">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="Binding1"
contract="WebServiceName.I_Service2" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/WebServiceName/Service2/Service.svc" />
</baseAddresses>
</host>
</service>
</services>

最佳答案

我一直这样做的方式如下:为服务设置一个“基地址”并将端点地址指定为不同的文本以附加到该基地址...

 <service name="MyNamespace.MyService">
<endpoint address="FirstEndpointAddress" binding="netTcpBinding"
name="FirstEndpointName"
contract="MyNamespace.FirstEndpointContract" />
<endpoint address="SecondEndpointAddress" binding="netTcpBinding"
name="SecondEndpointName"
contract="MyNamespace.SecondEndpointContract" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8733/MyBaseAddress" />
</baseAddresses>
</host>
</service>

因此在您的情况下,基地址可能是 localhost/WebServiceName,端点 1 的端点地址可能是 Service1/Service.svc。同样,对于端点 2,它可能是 Service2/Service.svc。我可以看到您已按照建议将完整地址放在端点地址中,但我只能说我已经成功地做到了这一点。

关于c# - WCF 服务在 2 个不同的服务契约(Contract)上公开 2 个端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13742065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com