我实施了HttpListener
来处理 SoapRequests 。这工作正常,但我找不到问题的解决方案,一些肥皂请求需要花费太多时间,导致客户端超时。
如何让请求客户知道他的请求不是超时?
我想在处理请求时发送“虚拟”信息,但是当你Close
响应对象时,HttpListener似乎只发送数据,这只能做一次,所以这是我认为不是正确的做法。
Soloution:
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();
答案 0 :(得分:0)
发送虚拟信息并不是一个坏主意。
我认为您需要在写入虚拟数据后在Flush()
的{{1}}属性上调用HttpListenerResponse
方法。您还必须启用OutputStream
属性:
尝试定期发送虚拟空间:
SendChunked
答案 1 :(得分:0)
我看到两个选项 - 在客户端增加超时或扩展协议以及来自客户端的长时间运行操作的操作状态请求。
答案 2 :(得分:0)
如果您使用的是.net 4.5,请查看HttpListenerTimeoutManager Class,您可以使用此类作为基础来实现自定义超时行为。