我创建了 2 个 WCF 端点,服务端点驻留在桌面应用程序上(IP 地址为 10.8.20.175);客户端端点驻留在 Web 托管的应用程序上。
这是服务端点配置
<services>
<service behaviorConfiguration="NotificationServiceBehavior"
name="NotificationService">
<endpoint address="" binding="netTcpBinding" contract="INotificationService" />
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:3337/NotificationService" />
</baseAddresses>
</host>
</service>
</services>
这是客户端端点配置
<system.serviceModel>
<client>
<endpoint address="net.tcp://10.8.20.175:3337/NotificationService"
binding="netTcpBinding" contract="INotificationService"
name="NetTcpBinding_INotificationService" />
</client>
<bindings>
<netTcpBinding>
<binding sendTimeout="00:10:00" maxReceivedMessageSize="1000000" name="NetTcpBinding_INotificationService"/>
</netTcpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
请注意,在端点地址中,我放置了服务端点的实际 IP 地址。当我在 localhost 上测试服务端点和客户端端点之间的通信时,该地址是 localhost:3337 并且通信良好。现在,当我部署端点时,出现以下错误:
套接字连接被中止。这可能是由于处理您的消息时出错或远程主机超出接收超时,或者是潜在的网络资源问题造成的。本地套接字超时为“00:10:00”。
System.Net.Sockets.SocketException:远程主机在 System.ServiceModel.Channels 的 System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) 处强行关闭了现有连接。 SocketConnection.ReadCore(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout, Boolean close)
日志说连接被远程主机强行关闭,这意味着客户端端点实际发送了请求并且它到达了服务端点?在这一点上我很困惑。我不确定客户端端点是否可以到达服务端点。
顺便说一句,从客户端端点机器,我可以 ping 服务端点的机器,也可以在端口 3337 上远程登录到远程机器。