1

HttpWebRequestを使用してXMLを投稿し、XMLを受信するクラスがあります。それはすべてWindowsアプリケーションでうまく機能しますが、ASP.Net Web側で使用すると、WebException「リモートサーバーに接続できません」として表示されます。それは私の会社のプロキシを通過することと関係があると思います。ただし、Webページで機能するようにクレデンシャルを設定する方法がわかりません。以下は、XMLを投稿するコードです(m_Credentialsは「CredentialCache.DefaultCredentials」を使用して設定されています:

    private string PostData(string url, string postData)
    {
      HttpWebRequest request=null;

      Uri uri = new Uri(url);
      request = (HttpWebRequest) WebRequest.Create(uri);
      request.Method = "POST";
      request.ContentType = "application/x-www-form-urlencoded";
      request.ContentLength = postData.Length;

      // Tell it to use our credentials else we may not get through 
      if (m_Credentials != null)
      {
        request.Proxy.Credentials = m_Credentials;
      }


      using(Stream writeStream = request.GetRequestStream())
      {
        UTF8Encoding encoding = new UTF8Encoding();
        byte[] bytes = encoding.GetBytes(postData);
        writeStream.Write(bytes, 0, bytes.Length);
      }

      string result=string.Empty;
      using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
      {
        using (Stream responseStream = response.GetResponseStream())
        {
          using (StreamReader readStream = new StreamReader (responseStream, Encoding.UTF8))
          {
            result = readStream.ReadToEnd();
          }
        }
      }
      return result;
    }
4

3 に答える 3

1

以下は、XMLを投稿するコードです(m_Credentialsは「CredentialCache.DefaultCredentials」を使用して設定されています

それが問題かもしれません。Windowsアプリでは、プロキシでの認証に使用される資格情報は、現在ログインしているユーザーの資格情報になります。ASP.NETアプリでは、使用される資格情報は、asp.netプロセスを実行しているローカルサービスアカウントからの資格情報になります。1つのオプションは、ネットワーク上の実際の有効なアカウントに資格情報を設定することです。

request.Credentials = new NetworkCredential("username","password","domain");
于 2012-04-18T14:24:25.633 に答える
0

ここに値を入れてみてください:

   request.Credentials = new NetworkCredential(cre.Username, cre.Password, cre.Domain);

毎回送信したくない場合は、CredentialCacheを使用することもできます...)

CredentialCache cache = new CredentialCache();
Uri prefix = new Uri ("http://exchange.somedomain.com");
cache.Add (prefix, "Digest", new NetworkCredential ("joe", "passwd"));
cache.Add (prefix, "Negotiate", new NetworkCredential ("joe", "passwd"));
于 2012-04-18T14:27:29.017 に答える
0

問題は、リクエストのプロキシを設定する必要があるという事実に起因していました

request.Proxy = new WebProxy(m_ProxyAddress);

そして、IEのプロキシアドレスは、使用する実際のアドレスを返すJavaスクリプトに対するものでした。

助けてくれてありがとうGav

于 2012-04-20T12:20:00.427 に答える