1

我实现了一个HttpListener来处理SoapRequests。这工作正常,但我找不到问题的解决方案,一些肥皂请求需要太多时间,导致客户端超时。

我如何让请求的客户知道他的请求不是超时?

我考虑过在处理请求时发送“虚拟”信息,但是 HttpListener 似乎只在您Close响应对象时发送数据,而且这只能执行一次,所以我想这不是正确的做法.

解决方案:

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

发送虚拟信息不是一个坏主意。

我认为您需要在写入虚拟数据后调用'属性Flush()上的方法。您还必须启用属性:HttpListenerResponseOutputStreamSendChunked

尝试定期发送一个虚拟空间:

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

我看到两个选项 - 在客户端增加超时或使用来自客户端的操作状态请求扩展协议以进行长时间运行的操作。

于 2013-05-21T13:16:45.313 回答
0

如果您使用的是 .net 4.5,请查看HttpListenerTimeoutManager 类,您可以使用该类作为实现自定义超时行为的基础。

于 2013-05-21T13:18:49.877 回答