我想通过流将消息发送回客户端。我希望客户端尽快开始处理这些消息(在服务器完成服务器端的流式传输之前)。
我已经实现了 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 场景中不起作用,但仅适用于自托管案例?我需要做些什么不同的事情?
此问题的一个可能原因似乎是 servicestack 响应流设置为使用缓冲。我找不到改变这种情况的方法。可能吗?