WCF 发现找到端点,但地址是 localhost
我有一个名为“GetNameService”的 wcf 可发现服务,该服务托管在 PC @ 10.0.0.5:8732 上。它由 wsHttpBinding 托管,并可通过 UdpEndpoint 发现。我还有一个客户端@ 10.0.0.9,它在同一网络中发现此类服务。当我运行客户端时,我能够发现该服务,但发现的服务的终点是本地主机。怎么会出现这种情况,请大家帮帮我。
更多信息,
App.config 使用
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
<service name="NameService.GetNameService">
<host>
<baseAddresses>
<add baseAddress = "http://10.0.0.5:8732/Design_Time_Addresses/NameService/GetNameService/" />
</baseAddresses>
</host>
<!-- Service Endpoints -->
<!-- Unless fully qualified, address is relative to base address supplied above -->
<endpoint address ="" binding="wsHttpBinding" contract="NameService.IGetNameService">
<!--
Upon deployment, the following identity element should be removed or replaced to reflect the
identity under which the deployed service runs. If removed, WCF will infer an appropriate identity
automatically.
-->
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<!-- Metadata Endpoints -->
<!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. -->
<!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
我在客户端计算机中打开浏览器并输入服务地址,我看到了服务详细信息页面,但 wsdl 链接仍然指向 localhost(如下所示)
svcutil.exe http://localhost:8732/Design_Time_Addresses/NameService/GetNameService/?wsdl
而不是
svcutil.exe http://10.0.0.5:8732/Design_Time_Addresses/NameService/GetNameService/?wsdl< /a>
此外,同一个应用程序似乎可以在我的工作场所工作,那里有可用的 dns,并且系统通过交换机连接,但它在我的家里不起作用,那里的电脑通过路由器连接。这会影响什么吗?!?
更新 它不在 IIS 中运行,而是通过普通控制台应用程序托管
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您在 IIS 上运行,则必须为您的站点设置默认主机名规则:
请参阅 http://forums.asp.net/p/1096811/1659596.aspx 了解更多详细信息。
If you are running on IIS, you have to have a default hostname rule for your site:
See http://forums.asp.net/p/1096811/1659596.aspx from more details.
通过使用在代码中解决了这个问题(对于 tcp.net 连接)。
剩下的唯一(可能较小)问题是将哪一台计算机 IP 设置为主机...输入的 Uri 是在 DiscoveryClient.Find(...) 响应中返回的 Uri。
Solved it in code (for a tcp.net connection) by using.
The only (perhaps smaller) problem that remains is which of the computers IP to set as host... The Uri entered is the one that is returned in the DiscoveryClient.Find(...) response.
如果您仍然需要这个,事实证明,您可以在 baseAddress 中使用通配符:
In case you still need this, it turns out, you can just use a wildcard in baseAddress: