1

SoapRequestsHttpListenerを処理するために を実装しました。これは正常に動作しますが、一部の SOAP 要求に時間がかかりすぎて、クライアント側でタイムアウトが発生するという問題の解決策が見つかりません。

要求しているクライアントに、彼の要求がタイムアウトではないことを知らせるにはどうすればよいですか?

リクエストの処理中に「ダミー」情報を送信することを考えましたが、HttpListenerCloseは応答オブジェクトの場合にのみデータを送信するようで、これは一度しか実行できないため、これは正しいことではないと思います.

解決策:

Thread alliveWorker = new Thread(() =>
{
    try
    {
        while (context.Response.OutputStream.CanWrite)
        {
            context.Response.OutputStream.WriteByte((byte) ' ');
            context.Response.OutputStream.Flush();
            Thread.Sleep(5000);
        }
    }
    finally
    {

    }
});

alliveWorker.Start();


doWork();

alliveWorker.Interrupt();

createTheRealResponse();
4

3 に答える 3

0

クライアント側でタイムアウトを増やすか、長時間実行される操作のためにクライアントからの操作ステータス要求でプロトコルを拡張します。

于 2013-05-21T13:16:45.313 に答える
0

ダミーの情報を送信することは悪い考えではありません。

ダミーデータを書き込んだ後、のプロパティFlush()でメソッドを呼び出す必要があると思います。プロパティも有効にする必要があります。HttpListenerResponseOutputStreamSendChunked

一定の間隔でダミー スペースを送信してみてください。

response.SendChunked = true;
response.OutputStream.WriteByte((byte)' ');
response.OutputStream.Flush();
于 2013-05-21T13:16:10.333 に答える
0

.net 4.5 を使用している場合は、HttpListenerTimeoutManager Classを参照してください。このクラスをベースとして使用して、カスタム タイムアウト動作を実装できます。

于 2013-05-21T13:18:49.877 に答える