WCF-没有在http localhost上侦听的终结点+由于目标计算机主动拒绝,因此无法建立连接=>;外部网络
本文关键字:拒绝 建立 连接 外部 网络 gt 目标计算机 localhost http 结点 WCF- | 更新日期: 2023-09-27 18:24:13
我在控制台中托管WCF服务时遇到问题。尝试在这里搜索,但找不到这个问题的解决方案,即使它与这里的其他问题类似。
托管非常简单。
C#-主机
WCFSrv = new WCFService();
WCFSrvHost = new ServiceHost(typeof(WCFService));
udaWCFSrvHost.Open();
配置:
<system.serviceModel>
<services>
<service name="WCF_Service.WCFService">
<endpoint address="" binding="basicHttpBinding" contract="WCF_Service.IWCFService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:23456/WCFService/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="BasicTimeouts" closeTimeout="00:00:30" openTimeout="00:00:30"
receiveTimeout="00:00:30" sendTimeout="00:00:30" />
</basicHttpBinding>
</bindings>
</system.serviceModel>
我可以通过WcfTestClient从localhost访问服务,并调用服务提供的方法。
我可以通过WcfTestClient从同一网络访问服务,但不能调用服务提供的方法。一旦我尝试调用方法,我就会收到错误消息:
There was no endpoint listening at http://localhost:23456/WCFService/ that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
Inner Exception:
No connection could be made because the target machine actively refused it 127.0.0.1:23456
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
我试着通过netstat检查是否有23456端口打开,应用程序是否在该端口上侦听,23456端口是否打开并侦听。
当我试图修改基址(而不是localhost:23456,我在网络中放置了服务器的真实IP,例如10.xx.xx.xx)时,我也可以调用方法,但这只是内部解决方案的变通方法。
服务器和端口应向外部网络开放,并可通过互联网访问。我试图从互联网上访问服务,我能够从互联网上获得服务(证明端口是打开的),但由于上面写的问题,我面临着相同的问题=>无法调用方法。
有没有人有同样问题的经验,可以帮助我吗?
在注释中回答,请放在此处以确保完整性。
请正确检查服务器上的客户端配置点,而不是localhost。
我是WCF的新手,但最近也遇到了同样的问题。我刚刚为客户端项目制作了一个配置文件,a在那里写下了端点的地址:
<system.serviceModel>
<services>
<service name="WCF_Service.WCFService">
<endpoint address="" binding="basicHttpBinding" contract="WCF_Service.IWCFService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:23456/WCFService/" />
</baseAddresses>
</host>
</service>
</services>
您可以使用此参考:http://dotnetmentors.com/how-to-host-wcf-service-in-iis-7.aspx
在我看来,这很方便。如果不起作用,请尝试重新创建项目。
听起来你绑定到了错误的IP地址,试试这个:
<host>
<baseAddresses>
<add baseAddress="http://0.0.0.0:23456/WCFService/" />
</baseAddresses>
</host>
使用0.0.0.0而不是localhost会将您的服务绑定到该主机上的所有IP。
感谢大家的支持
我的问题的解决方案:
不要使用WcfTestClient来测试来自外部网络的服务,至少在我的情况下,我遇到了问题中描述的问题。
对于初学者来说,当你有IIS 托管的服务时,简单的建议
- 使用配置文件在项目中定义WCF设置(例如WCF服务库)
- 不要忘记将WCF服务项目到Host应用程序的设置复制到app.config中
- 当从外部网络进行测试时,使用带有自己的app.config的简单客户端应用程序,其中端点必须指向目标服务
M。