xml - WCF 错误 "This could be due to the fact that the server certificate is not configured properly with HTTP.SYS in the HTTPS case"

标签 xml wcf web-services wcf-security

我在使用从 Windows 服务到我的 Web 服务器上运行的 WCF 服务的 WCF 调用时遇到问题。这个电话已经工作了几个星期,但突然停止工作,此后一直没有工作。

我遇到的异常是:

General Error Occurred System.ServiceModel.CommunicationException: An error occurred while making the HTTP request

然后它说

This could be due to the fact that the server certificate is not configured properly with HTTP.SYS in the HTTPS case. This could also be caused by a mismatch of the security binding between the client and the server.

我在两端使用的安全性是 wsHttpBinding,没有任何类型的加密。它也只是使用 HTTP - 而不是 HTTPS,所以我不确定为什么它会提示 HTTPS。

内部异常堆栈的其余部分是:

SystemNet.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Unable to write data to the transport connection: An invalid argument was supplied. ---> System.Net.Sockets.SocketException: An invalid argument was supplied at System.Net.Sockets.Socket.MultipleSend(BufferOffsetSize[] buffers, SocketFlags socketFlags) at System.Net.Sockets.NetworkStream.MultipleWrite(BufferOffsetSize[] buffers)

我还应该注意,在我的程序中发生这种情况的点是在调用 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 错误,但只是没有显示它? )

最佳答案

我们遇到了这个问题,因为主机服务器已更新为使用 TLS V1.2,并且我们使用标准 SSL 进行连接。这是作为网站渗透测试的一部分进行的更新。我们在代码连接中看到了问题,但浏览器没有看到 wsdl。 以下代码已解决:

if (System.Net.ServicePointManager.SecurityProtocol == (SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls))
    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;

取自此处:Disable SSL fallback and use only TLS for outbound connections in .NET? (Poodle mitigation)

关于xml - WCF 错误 "This could be due to the fact that the server certificate is not configured properly with HTTP.SYS in the HTTPS case",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2013880/

相关文章:

jquery - 从 jQuery 调用 WCF 服务库时出现问题

.net - RESTful服务特定场景的最佳实践

xml - 解码 XML 保留子元素

asp.net - Fiddler 无法从 ASP.NET 网站嗅探 SOAP 流量

xml - 返回舍入结果的 XPath SUM 函数

c# - WCF中获取回调 channel 的IP地址

java - 如何仅使用 java SE 创建支持多个客户端请求的 java web 服务?

java - 没有端点 URL 的 WSDL

c - Tinyxml - 如何导出多个文件

c# - XML 反序列化 - 不需要 xmlns