リモートSAPサーバーに接続する必要があるWPFC#アプリケーションがあります。2台のコンピューター(同じネットワーク)でアプリケーションを実行していますが、サーバーにアクセスできることがわかっています。
最初は、コンピューターAはWeb要求を使用して正常に接続できます(数回試行した後、すべて正常に動作します)。ランダムに(複製できないようです)、すべてのWeb要求が失敗し、「リモートサーバーに接続できません」(System.Net.WebExceptionと入力)というメッセージが表示されます。ブラウザでURLに移動すると、問題なく読み込まれます。アプリケーションのみが接続できません。例外をスローするメソッドはHttpWebRequest.GetRequestStreamです。
アプリケーションを数回再起動した後でも、すべてのHttpWebRequestsは接続に失敗します。複数のSAPサーバーがあり、それらのいずれかに接続しようとすると同じ結果が得られます。その間、コンピューターB(私の開発マシン)上のアプリケーションは、問題なくどのサーバーにも接続できます。コンピュータAを完全に再起動した後でのみ、再接続できます。
これは、これまでに2台の異なるコンピューターで発生しました。どちらの場合も、それを解決する唯一の方法は、コンピューターを再起動することでした。
ここにいくつかのコードがあります:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "text/xml; charset=utf-8";
request.ContentLength = contentLength;
request.Headers.Add("Authorization", GetAuthHeader());
request.Timeout = GetTimeout();
Stream post = request.GetRequestStream();//this line throws the exception
//...write to stream...
post.Close();
編集:応答部分を見落としました:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responsedata = response.GetResponseStream();
//...read all response data...
if (responsedata != null)
responsedata.Close();
Edit2:それで、私はCloseへのすべての呼び出しをコメントアウトし、数十のリクエストを行いました。また、応答を取得するコードを削除し、さらにいくつかのリクエストを行いました。これらのテスト中、例外はなく、すべてが正常に機能しました。
これらの結果はさておき、このようなことがプログラムを壊す可能性があることは理解できますが、プログラムを再起動した後、または別のリモートサーバーに接続しようとした後も、なぜそれが壊れてしまうのかわかりません。.NET Frameworkで何かが混乱しているように見えますが、マシン全体を再起動しない限り、それ自体は解決されません。