"基本接続が閉じられました:接続が予期せず閉じられました。"プロダクションサーバーでHttpWebRequestクラスを使用してPOSTしようとしたときにエラーが発生しました。私の開発マシンではうまくいきます。基本接続HttpWebRequestで閉じたPOSTプロダクションサーバーで
私はもともとWebClientクラスを使ってみましたが、問題を研究中に見つけた提案のいくつかを試みるためにHttpWebRequestに切り替えました(PreAluthenticate true、 とProtocolVersionを1.0に設定するなど)。
プロダクションサーバーでしか起こっていないので、IISと何か関係があると推測しています。
はここに私のコード
HttpWebRequest HttpWReq =
(HttpWebRequest)WebRequest.Create(webURL);
ASCIIEncoding encoding=new ASCIIEncoding();
Byte[] postbytes = Encoding.ASCII.GetBytes(data);
HttpWReq.Headers.Add("Authorization",
String.Format("Basic {0}", authstring));
HttpWReq.KeepAlive = false;
HttpWReq.PreAuthenticate = true;
HttpWReq.Credentials = CredentialCache.DefaultCredentials;
HttpWReq.UseDefaultCredentials = true;
HttpWReq.ProtocolVersion = HttpVersion.Version10;
HttpWReq.Method = "POST";
HttpWReq.ContentType = "application/x-www-form-urlencoded";
HttpWReq.ContentLength = postbytes.Length;
Stream newStream = HttpWReq.GetRequestStream();
newStream.Write(postbytes, 0, postbytes.Length);
newStream.Close();
そして、私はもともとWebClientクラスに
/* WebClient client = new WebClient();
client.Headers.Add("Authorization",
String.Format("Basic {0}", authstring));
client.Headers.Add("Content-Type",
"application/x-www-form-urlencoded");
client.UseDefaultCredentials = true;
System.Net.ServicePointManager.Expect100Continue = false;
Byte[] postbytes = Encoding.ASCII.GetBytes(data);
byte[] resp = client.UploadData(webURL, "POST", postbytes); */
感謝を使用してみましたコードですが、任意の助けいただければ幸いです。
EDIT:ターゲットフレームワーク(私はテストのための新しいプロジェクトを使用)に設定した場合、私はこの情報
POST [MyWebSite] HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave- flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: [MyWebSite]
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; GTB6.5; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: [MyHost]
Content-Length: 188
Connection: Keep-Alive
Pragma: no-cache
Cookie: __utma=62854692.1254171006.1276438746.1289273298.1289317993.21; __utmz=62854692.1277743505.3.3.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=yeled; ASPSESSIONIDQQQRCRAT=ANNHGGNBNOFNFCLHPBEJIMLC
__VIEWSTATE=%2FwEPDwUKMjA0OTM4MTAwNGRktZi0IsIUo6MOCYTxun8p8Po4AWeTtipGZ4L9%2FkY3KZU%3D&__EVENTVALIDATION=%2FwEWAgLHhsXtBwK14deQBbiFCpWBnsp%2BicqBy%2FNXAkhuVDX9WF1jZayRuTgPc3Ov&btnTest=Test
EDIT2
を得たヘッダを調べるために、フィドラーを使用し
2.0に(私はフレームワークのすべてのバージョンをテストしなかった)それは動作します。私はネットが.net 4.0でセキュリティを異なって処理すると推測しています。これは解決策ではありませんが、私は誰かがこの問題を解決するためにこの情報を使用できることを願っています。
私はHttpWReq.Expect = ""を設定しようとしましたが、diffrenceを作成していないようです。私はフィドラーで何を探すべきか分かりませんが、私はその情報で自分の投稿を更新しています。 – Jack
私は自分の答えを更新しました。 – Aliostad
ご協力ありがとうございます。私は応答を取得しようとしましたHttpWebResponse response =(HttpWebResponse)HttpWReq.GetResponse();それは戻ってきている(401)Unauthorized。 Fidlerのデータについては、投稿されたデータがヘッダーのRawビュー(インスペクタタブの下)から間違った情報を探している可能性があります。 – Jack