1

我有一个类使用 HttpWebRequest 发布一些 XML 并接收一些 XML。它在 Windows 应用程序上运行良好,但是当我在 ASP.Net Web 端使用它时,我得到 WebException“无法连接到远程服务器”。我认为这与通过我的公司代理有关。但我不确定如何设置凭证以便它可以在网页中工作。下面是发布 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 进程的本地服务帐户的凭据。一种选择是将凭据设置为网络上的实际有效帐户。

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

问题被追溯到我需要为请求设置代理的事实

request.Proxy = new WebProxy(m_ProxyAddress);

并且 IE 中的代理地址是一个 java 脚本,它返回要使用的真实地址

感谢您的帮助

于 2012-04-20T12:20:00.427 回答
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 回答