a specific issue with my ASP.NET applicationをデバッグしようとしています。で例外をスローサーバーから切断せずにHttpWebRequestを再利用できますか?
void uploadFile(string serverUrl, string filePath)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.
Create(serverUrl);
CredentialCache cache = new CredentialCache();
cache.Add(new Uri(serverUrl), "Basic", new NetworkCredential("User", "pass"));
request.Credentials = cache;
request.Method = "POST";
request.ContentType = "application/octet-stream";
request.Timeout = 60000;
request.KeepAlive = true;
using(BinaryReader reader = new BinaryReader(
File.OpenRead(filePath))) {
request.ContentLength = reader.BaseStream.Length;
using(Stream stream = request.GetRequestStream()) {
byte[] buffer = new byte[1024];
while(true) {
int bytesRead = reader.Read(buffer, 0, buffer.Length);
if(bytesRead == 0) {
break;
}
stream.Write(buffer, 0, bytesRead);
}
}
}
HttpWebResponse result = (HttpWebResponse)request.GetResponse();
//handle result - not relevant
}
とWrite()
:クライアントは、次のコードを実行し、「トランスポート接続にデータを書き込むことができません:あなたのホストマシンにソフトウェアによって中止された確立された接続」テキスト。 System.Net tracingを使用し、Content-Length
と設定してリクエストを送信したときに問題が発生することが判明しました。私は、サーバー上のコードでusing
文の中で、すべてを省略した場合
は、具体的に速やかWWW-Authenticate
で応答し、クライアントはWWW-Authenticate
で要求をrepostsし、すべてがアップロードされていないで、ファイルを除いて罰金になり、要求はかなり後に失敗しました。
私は次のことをしたいと思います:データなしでリクエストを送信し、WWW-Authenticate
を待ってから、WWW-Authenticate
とデータでそれを繰り返してください。最初にすべてのパラメータを設定してから、を呼び出して送信しますが、ContentLength
プロパティを設定しようとすると、「このプロパティは書き込み開始後に設定できません」という例外がスローされます。
したがってHttpWebRequest
は再利用できないようです。
接続を終了せずにリクエストを再送信するために再利用するにはどうすればよいですか?
私も同じ問題があります。あなたがソリューションを手に入れたら、変更された新しいコードを提供してください。 – Herin
@Herin:nonceで認証を使用する場合、解決策はありません。基本認証のようなものを使用する場合は、WWW-Authenticateフェーズがないように、「Authorization」ヘッダーを設定することができます。 – sharptooth
しかし、私は 'stream.Write(buffer、0、bytesRead)'の行にエラーが表示されています。あなたが修正されたコードを提供して、私がよりよく理解できるようにしてください。ありがとう – Herin