我遇到的问题是我的Web API在本地系统上运行良好,但在服务器上部署时会产生问题。我已经检查过,多次交叉检查,看看我是否错过了配置中的任何内容,但一切都井然有序。 以下是我正在使用的代码。 抛出此错误的行是:using(WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
public static string PostDataToWebService(string stream, string CustIP)
{
var _url = AdditionalSetting.AutoEuroURL;
string soapResult = string.Empty;
try
{
XmlDocument soapEnvelopeXml = CreateSoapEnvelope(stream);
HttpWebRequest webRequest = CreateWebRequest(_url, CustIP);
InsertSoapEnvelopeIntoWebRequest(soapEnvelopeXml, webRequest);
IAsyncResult asyncResult = webRequest.BeginGetResponse(null, null);
asyncResult.AsyncWaitHandle.WaitOne();
using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
{
using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
{
soapResult = rd.ReadToEnd();
}
}
}
catch (WebException wbex)
{
using (var ResStream = wbex.Response.GetResponseStream())
using (var reader = new StreamReader(ResStream))
{
ErrorLog.ErrorLogs("WebException at AutoEurope Call web service : " + reader.ReadToEnd());
}
}
return soapResult;
}
private static XmlDocument CreateSoapEnvelope(string stream)
{
XmlDocument soapEnvelop = new XmlDocument();
try
{
soapEnvelop.LoadXml(stream);
}
catch (Exception ex)
{
}
return soapEnvelop;
}
private static HttpWebRequest CreateWebRequest(string url, string CustIP)
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Headers.Add("SOAPAction", "OTA");
webRequest.Headers.Add("X-Forwarded-For", "\"" + CustIP + "\"");
webRequest.ContentType = "text/xml;charset=\"utf-8\"";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
webRequest.KeepAlive = false;
webRequest.ProtocolVersion = HttpVersion.Version10;
return webRequest;
}
private static void InsertSoapEnvelopeIntoWebRequest(XmlDocument soapEnvelopeXml, HttpWebRequest webRequest)
{
using (Stream stream = webRequest.GetRequestStream())
{
soapEnvelopeXml.Save(stream);
}
}
我收到的CustIP是我在方法中作为参数获取的请求IP地址。它的格式正确。 任何建议都会有所帮助。
答案 0 :(得分:0)
如果您在BeginGetResponse()
和EndGetResponse()
之间收到此错误,则有以下几种可能:
Begin
和End
之间传递,服务器超时。这可以通过额外的记录来检查。检查TLS问题的最佳方法是登录测试服务器并尝试访问网络浏览器(如Google Chrome或Internet Explorer)中的网址。你不能在这里使用FireFox进行测试,因为FireFox使用它自己的TLS实现,所以可能能够在Chrome,IE和.NET无法成功的地方取得成功。
如果您无法使用浏览器导航到该网站,则很可能是:
如果您可以选择安装WireShark并了解TLS握手,那么这可能是确定系统无法通信的最快方式,因为您可以直接看到问题并消除大量猜测
通常,诸如此类的问题是因为客户端或服务器正在使用过时的操作系统。 Windows 95客户端不太可能连接到在最新版本的OpenSUSE上运行的HTTPS网站,因为它们太不同了。具体而言,Windows 95不太可能支持除了SSLv3之外的其他任何基本密码套件(如RC4),这些套件在最近的OpenSUSE上都不会得到支持,因为它们现在被认为是不安全的。甚至Windows Server 2003也太旧了,无法支持TLS v1.1或v1.2。检查操作系统的版本,WireShark将再次强调这一点。
<强>更新强>
如果您无法连接到该服务并且该服务已公开,您可以使用https://www.ssllabs.com/ssltest/上的在线SSL测试程序验证服务器是否正确响应。
在这种情况下(使用您在注释中提供的地址),问题是服务器没有正确响应任何连接,甚至是到端口80的不安全的HTTP连接。您必须联系服务器&#39; s支持部门,让他们调查问题。
希望这有帮助