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