使用WCF调用从Windows服务到在Web服务器上运行的WCF服务时遇到问题。该呼叫已经运行了几个星期,但随后突然停止工作,此后一直没有工作。
我得到的例外是:
发生一般错误System.ServiceModel.CommunicationException:发出HTTP请求时发生错误
然后说
这可能是由于在HTTPS情况下未使用HTTP.SYS正确配置服务器证书。这也可能是由于客户端和服务器之间的安全绑定不匹配引起的。
我在两端使用的安全性是wsHttpBinding,没有任何类型的加密。它还只是使用HTTP而不是HTTPS,所以我不确定为什么它抱怨HTTPS。
内部异常堆栈的其余部分是:
SystemNet.WebException:基础连接已关闭:发送时发生意外错误。---> System.IO.IOException:无法将数据写入传输连接:提供了无效的参数。---> System.Net.Sockets.SocketException:System.Net.Sockets.NetworkStream.MultipleWrite(BufferOffsetSize []处的System.Net.Sockets.Socket.MultipleSend(BufferOffsetSize []缓冲区,SocketFlags socketFlags)提供了无效的参数缓冲区)
我还应注意,程序中发生这种情况的位置是在对Web服务的调用的“执行”行上-即,当我调用Web服务并将其传递给包装好的DataContract对象时,炸毁。
这项服务所做的全部工作就是传递大量XML(作为.NET对象传递给客户端的调用),然后它会做一些工作。可能正在传输大约100-200k的XML。我已经将两端的数据大小限制提高到超过6兆,但这似乎无济于事。
有任何想法吗?
有关此问题的更多信息:
当我们在本地复制客户端环境时,我们发现除非进行以下更改,否则我们将无法上传大量XML:1.在服务器上,将“ maxRequestLength”设置为100 MB(比我们发送的要高)2.在对于客户端,我们将dataContractSerializer标记下的maxItemsInObjectGraph的值设置为“ 2147483646”。
通过这些更改,我们的本地安装成功上传。但是,客户端在其服务器上的安装仍然失败。有趣的是,一旦我们在服务器上更改了maxRequestLength的值,我们的测试安装就会开始抛出一个与maxItemsInObjectGraph设置有关的错误。在我们客户的服务器上,仍然发生原始的“ HTTP.sys”错误。
如前所述,我们根本没有使用SSL,另外还有2个Web服务调用以相同的方式执行和上传XML。但是,由于无法正常工作的服务呼叫会传输更多数据,因此这似乎是一个大小问题。
但是,如果客户端遇到的问题与我们的测试安装中的问题相同,那么我不明白为什么客户端错误消息不会与ObjectGraph错误相关。
是否有可能我们为客户端上的每个可能的错误都得到了通用的“无效参数”“ HTTP.sys”错误(即,它确实也得到了objectGraph错误,但没有显示出来?)