我正在尝试从C#程序调用JBoss服务,而且我遇到了一个令人烦恼的模糊错误。
JbossService proxy = new JbossService();
proxy.Credentials = new NetworkCredential("ME", "thepwd");
proxy.Url = //https url snipped
proxy.CookieContainer = new CookieContainer();
proxy.PreAuthenticate = true;
Console.WriteLine("Calling service...");
queryResponse qr = proxy.query();
Console.WriteLine("Done.");
抛出的异常和内部异常如下:
exception:底层连接已关闭:发送时发生意外错误。
内部异常:身份验证失败,因为远程方已关闭传输流。
我不太确定这意味着什么,除了JBoss比我喜欢的更喜欢我。我是从本地机器打电话,所以我不认为这是一个网络问题。有没有人见过这个?
答案 0 :(得分:3)
这通常发生在客户端无法验证服务器对https的信任时(通常是因为服务器证书是自签名的,或者是由未在客户端计算机上安装的根权限签名。
轻松修复(虽然有安全后果)....在初始化代码的某处添加以下内容:
System.Net.ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => { return true;};
基本上,这取代了服务器证书验证的应用程序范围处理,并使您的应用程序接受任何证书。如果你想获得更细粒度,你可以检查证书并在方法中加入一些逻辑。
这适用于基于System.Net的任何内容,因此它适用于Web服务以及任何基于WebRequest的内容。
答案 1 :(得分:1)
我没有用过JBOSS。这就是我在使用Microsoft技术时解决类似问题的方法 - 同样的问题可能会影响您的程序: