我在没有防火墙的Windows Server 2008 RC2 IIS 7上运行WCF服务。当我尝试使用netTcpBinding绑定调用它时,我得到了这个异常:
System.TimeoutException:打开 操作内没有完成 分配超时00:00:30。时间 分配给这个操作可能有 是超时的一部分。 ---> System.TimeoutException:套接字传输超时后 00:00:30。你已经超过了 在绑定上设置超时。时间 分配给这个操作可能有 是超时的一部分。 ---> System.Net.Sockets.SocketException:A 连接尝试失败,因为 关联方没有正确 一段时间后回复,或 建立连接失败,因为 连接主机未能响应
在 System.Net.Sockets.Socket.Receive(字节[] 缓冲区,Int32偏移量,Int32大小, SocketFlags socketFlags)at System.ServiceModel.Channels.SocketConnection.ReadCore(字节[] 缓冲区,Int32偏移量,Int32大小, TimeSpan超时,布尔结束)...
我调用的方法只返回一个数值,没有别的,所以问题不在超时。如果我使用wsHttpBinding - 它没有问题。此外,我添加了记录到我调用的方法,所以我知道它甚至没有执行。
我已经完成了从here配置IIS的所有步骤。问题是:
答案 0 :(得分:1)
我对这种误导性的错误信息感到沮丧。如果我没有错,你会在第一秒内得到这个TimeoutException。我可以向您保证您的问题与安全性或序列化问题有关。我把这个问题带到微软的WCF产品组,他们似乎很惊讶,但没有听到任何回复。
首先建议查看NetTcpBinding安全设置。确保客户端和服务具有相同的裸骨安全设置(例如,不是消息加密或传输层安全性)。如果您可以在没有安全性的情况下使其正常工作,请逐步增加安全设置。
第二个建议一些序列化问题可能会导致服务崩溃:空可空字段,重载方法与操作混合,模糊合同名称,无效转换。要调试,请在服务的配置设置中设置跟踪。您可以通过WCF服务配置实用程序(SvcConfigEditor.exe)轻松完成此操作。运行您的服务获取异常,停止它并使用WCF服务跟踪查看器工具打开生成的跟踪日志。这两个工具都附带.NET(不是Visual Studio),可以在Program Files / Windows SDKs文件夹中找到。