如何解决发布请求获取“无法连接到远程服务器”错误
首先,这个问题不是重复this,因为问题中没有答案,或者this,因为我尝试了所有答案。
我使用 .NET 4.5 框架中的 ASP.NET Web API 2.0 创建了一个 Web 服务。我发送的是一个简单的 POST 请求,而不是一个复杂的携带二进制多部分请求。
服务托管在 cdn.mydomain.com
失败故事
当我从 mydomain.com
或 anysubname.mydomain.com
调用服务时,我收到以下错误:
异常消息:无法连接到远程服务器
内部异常消息: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机未能响应而建立连接失败XXX.YYY.ZZZ.TTT :PORT(域IP地址)
成功案例
但是,当我从 Postman、JS、jQuery、本地项目、由另一家托管公司托管的 otherdomain.com 调用服务时,在 VDS 中托管的 otherdomain2.com 工作正常,我得到了完美的结果。
呼叫服务
我不认为调用方法有错误。它在成功案例中运行良好。
public Result UploadFile(InputData inputData,string CDNBaseURL,string Token)
{
Result result = new Result();
var webClient = new ExtendedWebClient();
webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
webClient.Encoding = Encoding.UTF8;
JavaScriptSerializer jss = new JavaScriptSerializer();
jss.MaxJsonLength = Int32.MaxValue;
string url = string.Format("{0}/Service/Upload/File/{1}",CDNBaseURL,Token);
// string serializedInputDATA = jss.Serialize(inputData);
string serializedInputDATA = jss.Serialize(new {
foo = "" // it's just for the test,original is the above
});
try
{
var uri = new Uri(string.Format("{0}",url),UriKind.Absolute);
string response = webClient.UploadString(uri,"POST",serializedInputDATA);
result = jss.Deserialize<Result>(response);
}
catch (Exception ex)
{
while (ex != null)
{
result.Message += "##" + ex.Message;
ex = ex.InnerException;
}
}
return result;
}
public class ExtendedWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest wr = base.GetWebRequest(address);
wr.Timeout = 1000 * 30; // timeout in milliseconds (ms)
return wr;
}
}
我尝试了很多东西,建议,这个问题是我最后的希望。
谢谢。
解决方法
.net 4.5 不再受支持 我建议更新到 .net 4.5.2 或更高版本。我还建议切换到使用 HttpClient 而不是 WebClient 进行休息调用。但是调用失败的原因是 WebClient 没有为调用使用正确的安全协议。在创建 Web 客户端之前添加以下代码行应该会有所帮助
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。