我正在尝试修补.net Web应用程序,该应用程序经过多年的工作开始未能获得UPS的运送报价,这对Web业务产生了巨大影响。经过反复试验和错误,我发现以下代码在控制台应用程序中可以正常运行:
static string FindUPSPlease()
{
string post_data = "<xml data string>";
string uri = "https://onlinetools.ups.com/ups.app/xml/Rate";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "POST";
request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version10;
byte[] postBytes = Encoding.ASCII.GetBytes(post_data);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postBytes.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postBytes, 0, postBytes.Length);
requestStream.Close();
// get response and send to console
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Console.WriteLine(new StreamReader(response.GetResponseStream()).ReadToEnd());
Console.WriteLine(response.StatusCode);
return "done";
}
Run Code Online (Sandbox Code Playgroud)
这可以在Visual Studio中很好地运行,并且可以从UPS那里得到一个很小的响应,即XML当然是错误的。
但是,如果我将此函数粘贴到Web应用程序中而不更改单个字符,则会抛出异常request.GetRequestStream():
身份验证失败,因为远程方已关闭传输流。
我在应用程序中的几个不同位置尝试了相同的结果。
Web应用程序环境会影响请求什么?