问题:
是否有某种方法可以访问一个端点而不获取另一个端点的详细信息?那就是连接到已配置服务的一个端点而不从服务的所有端点获取详细信息?
我使用同一个类配置了 2 个端点,具有两个不同的接口和两个不同的绑定。
Web 服务托管在 Windows 7 测试机器上的 IIS 7.5 中
文件摘录web.config
:
<bindings>
<basicHttpBinding>
<binding name="ServerUIBinding"
maxReceivedMessageSize="2097152" maxBufferSize="2097152"
sendTimeout="00:01:00" receiveTimeout="00:01:00">
</binding>
<binding name="ServerLinkBinding"
maxReceivedMessageSize="2097152" maxBufferSize="2097152"
sendTimeout="00:02:00" receiveTimeout="00:02:00">
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="APOServiceLibrary.ServerUI"
behaviorConfiguration="DefaultMetaDataBehaviour">
<endpoint name="ServerUIEndPoint"
address="/ServerUI"
binding="basicHttpBinding"
bindingConfiguration="ServerUIBinding"
contract="APOServiceLibrary.IServerUI">
</endpoint>
<endpoint name="ServerLinkEndPoint"
address="/ServerLink"
binding="basicHttpBinding"
bindingConfiguration="ServerLinkBinding"
contract="APOServiceLibrary.IServerLink">
</endpoint>
<endpoint address="mexServer"
binding="mexHttpBinding"
contract="IMetadataExchange">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DefaultMetaDataBehaviour">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False"/>
</behavior>
</serviceBehaviors>
</behaviors>
ServerUI.svc
我在一个文件中配置了如下服务:
<%@ ServiceHost Language="C#" Debug="true" Service="APOServiceLibrary.ServerUI" %>
http://localhost/test/serverui.svc
当我使用该工具连接到托管站点(设置它的方式,我可以使用以下 URL 进行连接WcfTestClient.exe
:)时,我可以正确看到两个端点的细分,如果我浏览,我同样可以看到 wsdl 定义至http://localhost/test/ServerUI.svc?wsdl
我一直在 stackoverflow 上读到,端点中的地址字段(例如 address="/ServerLink")与 IIS 配置的网站相关,并且应该可以使用它仅连接到一个端点路径类型:
http://localhost/test/ServerUI.svc/ServerLink
但是,这似乎不适用于该WcfTestClient.exe
工具。那就是我无法http://localhost/test/ServerUI.svc/ServerLink
使用该工具连接。我也无法在 Web 浏览器中浏览到该站点。另外,我尝试制作一个新的 c# 应用程序并使用该地址连接到 Web 服务,但它不起作用。每当我尝试这似乎总是会产生这种类型的错误
错误:无法从以下位置获取元数据 无法从以下位置获取元数据
http://localhost/test/ServerUI.svc/ServerLink
如果这是您有权访问的 Windows (R) Communication Foundation 服务,请检查您是否已在指定地址启用元数据发布。
那么,回到我的问题,有没有办法做到这一点?那就是只连接到一个端点并获得它的定义?MetadataExchange
为了分别为每个端点生成数据,我需要做些什么不同的事情吗?.svc
我可以配置文件中的内容吗?
我想这样做的原因是为我们的其他一些团队提供一个“更干净”的界面,使用更少的方法,并且对大型数据集超时不太敏感(这就是 ServerLink 的额外分钟超时)
我考虑过的一个解决方案是制作一个包装类并使用它来创建一个单独的 svc 文件,以便使用一个完全独立的 URL,但这似乎是一个糟糕的解决方案。