1

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 アプリケーションで機能するために言及する必要がある web.config または IIS の設定はありますか?

私のチーム メンバーの 1 人が既にこの質問をしていますが、まだ誰も回答していません。せっかくなので再投稿です。

これは正確な内部例外です:

接続先が一定時間経過しても正しく応答しなかったために接続に失敗したか、接続先ホストが XX.XX.XXX.XXX:443 に応答しなかったために確立された接続に失敗しました。

4

1 に答える 1

4

Ok!したがって、URL は SSL です。

2 つの可能性があります。

  1. コンソール アプリケーションが実行されているのと同じコンピューターで Web アプリケーションをテストする場合は、アプリケーション プールの ID を変更します。VS は ID を使用し、IIS は別の ID を使用します。

  2. そうでない場合は、ファイアウォールをバイパスする設定について web.config ファイルを確認してください

    <system.net> 
     <defaultProxy> 
      <proxy usesystemdefault="true" proxyaddress="http://proxy:port" bypassonlocal="false" /> 
     </defaultProxy> 
    </system.net>
    
于 2012-09-28T12:47:58.853 に答える