3

ストリーム経由でクライアントにメッセージを送り返したい。クライアントがこれらのメッセージの処理をできるだけ早く開始することを望みます (サーバーがサーバー側でストリーミングを完了する前に)。

IStreamWriter を実装しており、IStreamWriter の実装を返すサービスがあります。

public class StreamingService : Service
{
    public object Any(MyStreamRequest request)
    {
        return new MyStreamWriter(request);
    }
}

MyStreamRequest は次のように定義されています。

[DataContract]
public class StreamRequest : IReturn<Stream>
{
    [DataMember]
    public int HowManySecondsToProduceData { get; set; }
}

自己ホスト環境で実装をテストすると、完全に機能します。ただし、IIS でこれをホストすると、クライアントからの get 呼び出し

var client = new ProtoBufServiceClient("");
Stream stream = client.Get(new StreamRequest { HowManySecondsToProduceData = 20};

IStreamWriter.WriteTo 呼び出しが戻るまで戻りません (上記のサンプルでは 20 秒)。これにより、クライアントがストリームをすぐに処理できなくなり、大量の場合に障害が発生します。IStreamWriter.WriteTo 実装内で responseStream.Flush() を呼び出します。

なぜこれが IIS シナリオでは機能せず、セルフ ホストの場合にのみ機能するのかについての洞察はありますか? 他に何をする必要がありますか?

この問題の原因として考えられるのは、サービススタックの応答ストリームがバッファリングを使用するように設定されていることです。ただし、これを変更する方法が見つかりません。出来ますか?

4

2 に答える 2