从Web应用程序调用服务时出现“无法连接到远程服务器”错误

时间:2012-09-28 09:35:30

标签: asp.net system.net.httpwebrequest

使用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

1 个答案:

答案 0 :(得分:3)

确定!所以您的网址是SSL。

我们有两种可能性:

  1. 如果在运行控制台应用程序的同一台计算机上测试Web应用程序,请更改应用程序池的标识。 VS使用标识,IIS使用不同的标识。

  2. 如果没有检查你的web.config文件是否有绕过防火墙的设置

    <system.net> 
     <defaultProxy> 
      <proxy usesystemdefault="true" proxyaddress="http://proxy:port" bypassonlocal="false" /> 
     </defaultProxy> 
    </system.net>