在我的WPF应用程序中,我希望通过HTTPS忽略可能的证书错误与Web服务建立连接,这似乎是一件相当常见的事情,我正在研究它。
我找到了这个漂亮的片段:
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
我在return语句中设置了一个断点,并且从不调用它(也使用单独的方法尝试它)。
我也尝试将以下属性设置为false:
ServicePointManager.UseNagleAlgorithm = false;
ServicePointManager.Expect100Continue = false; //tried true too
ServicePointManager.CheckCertificateRevocationList = false;
我还尝试使用CheckValidationResult创建自己的ICertificatePolicy,它始终返回true并将其归因于ServicePointManager.CertificatePolicy。这也没效果。
在所有这些尝试中,我得到以下内容:
基础连接已关闭:发生意外错误 收到
我创建了一个单独的Windows窗体应用程序,只有三行:
WebReference.MySebService myWebService = new WebReference.MySebService();
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
bool result = myWebService.TestConnection();
//TestConnection is a method in my WebService that simply returns true.
它工作了。
我还能尝试什么?
信息:
答案 0 :(得分:2)
在对此强调了很多之后,我们终于找到了解决方案。
它的提示是在内部异常中,之前没有被注意到。它表示无法加载安全程序集。
巧合的是,我们在这个解决方案中有一个名为Security的项目,其输出程序集名为Security,这引起了冲突。并且只有在使用SSL时才会错误地访问它。
有趣的是,Visual Studio和编译器都没有告诉我这不是一个好主意,甚至没有一个像我们这样命名的.NET程序集。
解决方案是重命名这个程序集,一切都能立即完美运行,没有任何缺陷。
经验教训: