繁体   English   中英

WCF-没有端点在http localhost上侦听+无法建立连接,因为目标计算机主动拒绝了它=>外部网络

[英]WCF - No endpoint listening at http localhost + No connection could be made because the target machine actively refused it => external network

我在控制台中托管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到达服务并调用服务提供的方法。

我可以通过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)

我试图检查是否有端口23456打开,并且应用程序正在通过netstat -an在该端口上侦听,并且端口23456已打开并正在侦听。

当我尝试修改基址(而不是localhost:23456时,我在网络中放置了服务器的真实IP,例如10.xx.xx.xx)时,我也能够调用方法,但这只是内部解决方案的解决方法。

服务器和端口应向外部网络开放,并可以通过Internet访问。 我尝试从Internet获得服务,并且能够从Internet获得服务(证明端口已打开),但由于上述问题,面临相同的问题=>无法调用方法。

有没有人遇到过同样的问题,能为我提供帮助吗?

在评论中回答,出于完整性考虑。

正确检查服务器上的客户端配置点,而不是本地主机。

我是WCF的新手,但是最近我也遇到了同样的问题。 我刚刚在客户端项目中创建了一个配置文件,并在其中写入了端点的地址:

 <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之外时,为初学者提供简单的建议

  1. 使用配置文件在项目中定义WCF设置(例如WCF服务库)
  2. 不要忘记将设置从WCF服务项目复制到Host应用程序到app.config
  3. 从外部网络进行测试时,请使用具有自己的app.config的简单客户端应用程序,其中端点必须引导到目标服务。

M.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM