我已经在基于 Web 的应用程序上使用了两年多的 ASP.Net 类中的一些代码。我希望在命令行工具中执行一些类似的业务功能。我在两个应用程序中使用相同的代码,但命令行应用程序在代码底部附近调用“GetRequestStream”时超时。
如果我在处理完 req 和 req2 后关闭它们,我就可以调用 GetRequestStream 了。但是,为了让 req3 进行身份验证,它需要 req 和 req2 保持打开状态。所以,如果我让 req 和 req2 保持打开状态,GetRequestStream 就会超时。如果我关闭 req 和 req2,则对 GetRequestStream 的调用有效,但 req3 无法进行身份验证。
正如我所提到的,完全相同的代码作为基于 Web 的 ASP.Net 应用程序运行良好。只有当我使用此类将其构建为基于控制台的应用程序时,我才会遇到这些问题。
我认为这一定是有联系的东西,但我对从.Net构建命令行应用程序还很陌生。
任何帮助,将不胜感激。
string uri = baseUri + "auth/authrequired";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
req.Timeout = 1000000;
req.Proxy = null;
req.CookieContainer = cc;
var MyWebResponse = (WebResponse)req.GetResponse();
uri = baseUri + "authenticated/identity";
HttpWebRequest req2 = (HttpWebRequest)WebRequest.Create(uri);
req2.Timeout = 1000000;
req2.Proxy = null;
req2.CookieContainer = cc;
MyWebResponse = req2.GetResponse();
uri = baseUri + "j_security_check";
string reqParams = "j_username=" + "jmclaughlin" + "&j_password=" + "jmclaughlin";
byte[] reqData = Encoding.UTF8.GetBytes(reqParams);
HttpWebRequest req3 = (HttpWebRequest)WebRequest.Create(uri);
req3.Timeout = 1000000;
req3.Proxy = null;
req3.CookieContainer = cc;
req3.Method = "POST";
req3.ContentType = "application/x-www-form-urlencoded";
req3.AllowAutoRedirect = true;
req3.ContentLength = reqData.Length;
using (var s = req3.GetRequestStream())
s.Write(reqData, 0, reqData.Length);
MyWebResponse = req3.GetResponse();