使用Web应用程序调用服务时出现“无法连接到远程服务器”错误。但是当我从控制台应用程序调用它时,相同的代码运行。我只有服务的URL。
这是堆栈跟踪:
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,
SocketAddress socketAddress)
at System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,
Socket s4, Socket s6, Socket& socket, IPAddress& address,
ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout,
Exception& exception)
以下是我正在使用的代码:
HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
X509Certificate cert = X509Certificate.CreateFromCertFile(certificatePath);
req.ClientCertificates.Add(cert);
using (StreamReader sr = File.OpenText(inFilePath))
{
string xml = sr.ReadToEnd();
string postRaw = string.Format("request={0}", System.Web.HttpUtility.UrlEncode(xml));
byte[] buf = Encoding.UTF8.GetBytes(postRaw);
req.ContentLength = buf.Length;
try
{
Stream s = req.GetRequestStream(); //This is where I get the error.
s.Write(buf, 0, buf.Length);
s.Close();
}
catch (Exception ex)
{
}
}
HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
if (resp.StatusCode == HttpStatusCode.OK)
{
StringBuilder sb = new StringBuilder();
using (StreamReader reader = new StreamReader(resp.GetResponseStream(), System.Text.Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
{
sb.Append(line + "\r\n");
}
}
string resXml = sb.ToString();
}
web.config或IIS中是否有任何设置需要提及才能在Web应用程序中使用?
我的一名团队成员已经提出过这个问题,但目前还没有人回答过这个问题。这就是我再次发布它的原因。
这是确切的内部异常:
连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应XX.XX.XXX.XXX:443
答案 0 :(得分:3)
确定!所以您的网址是SSL。
我们有两种可能性:
如果在运行控制台应用程序的同一台计算机上测试Web应用程序,请更改应用程序池的标识。 VS使用标识,IIS使用不同的标识。
如果没有检查你的web.config文件是否有绕过防火墙的设置
<system.net>
<defaultProxy>
<proxy usesystemdefault="true" proxyaddress="http://proxy:port" bypassonlocal="false" />
</defaultProxy>
</system.net>