Jer*_*ore 11 c# web-services webrequest httpwebrequest windows-7
我有一个C#windows应用程序(.Net 3.0 Framework),它使用PHP Web服务调用HttpWebRequest.
在Win 7和Vista中,如果通过非SSL(即http://)进行调用,则代码可以正常工作.当呼叫被更改为调用链接的SSL(https :)版本时,它会超时HttpWebRequest.GetRequestStream().每次都会发生这种情况
当在Windows XP计算机上运行相同的应用程序时,它可以正常使用HTTP或HTTPS URL.
代码确实接受了所有服务器证书代码.另外,我添加了System.Net日志记录.它会写出日志,但因为数据包是加密的,除了Timeout abort语句之外你真的看不到多少.
我也尝试过Fiddler,但再加上加密数据包,我看不太多.顺便说一句,当我尝试使用Fiddler2解密应用程序挂起时,这样就没有成功.
无论如何,任何帮助将不胜感激.谢谢.
我会加:
在将正在访问的网站迁移到新服务器之后,在正在运行的C#应用程序中出现此错误,这表明存在服务器端问题.实际上,我们最终通过在Apache配置文件中设置"ServerName"值来匹配证书中注册的域名来解决此问题.(另一个论坛提到设置"ServerAlias"也可以.)
更具体地说,SSL站点的httpd.conf文件在VirtualHost部分中具有以下内容:
ServerName www.secure.mydomain.com
Run Code Online (Sandbox Code Playgroud)
证书已注册secure.mydomain.com,我们访问的URL也是https://secure.mydomain.com/test.html.
因此,只需将conf文件更改为以下内容并重新启动Apache即可:
ServerName secure.mydomain.com
Run Code Online (Sandbox Code Playgroud)
以下内容也很有效,最有可能:
ServerName www.secure.mydomain.com
ServerAlias secure.mydomain.com
Run Code Online (Sandbox Code Playgroud)
以下是一些其他背景信息,供将来参考:
我们在System.Net.trace.log中看到的两个错误是:
System.Net.Sockets Error: 0 : [4316] Exception in the
Socket#18796293::Receive - A blocking operation was
interrupted by a call to WSACancelBlockingCall
System.Net Error: 0 : [4316] Exception in the
HttpWebRequest#35191196:: - The operation has timed out
Run Code Online (Sandbox Code Playgroud)
以下是我们尝试的所有未解决问题的事情:
可以在Opera,IE8和Firefox中打开https URL而不会出现任何问题.WGET for Windows抱怨证书无效,但WGET又是一个旧的应用程序,似乎并不信任那么多的证书.
C#客户端应用程序在Windows XP下运行,但在Windows 7或Windows Vista中不运行.Windows 7和Vista似乎更积极地验证证书.它们在失败时不提供信息性错误消息,而是在SSL握手期间简单地超时.