首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FiddlerCore会话超时

FiddlerCore会话超时
EN

Stack Overflow用户
提问于 2014-03-19 08:26:53
回答 1查看 1.2K关注 0票数 0

我正在使用FiddlerCore处理本地请求。所有会话都在Queue<Session>中排队,并由BackgroundWorker处理。在进程完成后,我希望通过使用已处理的会话发送一个响应,指示处理的成功或失败。问题是我得到太晚了,我们已经在讨论服务器错误了。

这是FiddlerCore函数:

代码语言:javascript
复制
private static void FiddlerApplication_BeforeRequest(Session session)
{
    if (session.hostname.ToLower() == "localhost")
    {
        LogHelper.WriteFormat("Local request {0} enqueued", session.id);
        sessionsQueue.Enqueue(session);

        if (!sessionWorker.IsBusy)
            sessionWorker.RunWorkerAsync();
    }
}

这是线程函数:

代码语言:javascript
复制
private static void sessionWorker_DoWork(object sender, DoWorkEventArgs e)
{
    while (sessionsQueue.Count > 0)
    {
        if (sessionWorker.CancellationPending)
        {
            e.Cancel = true;
            sessionsQueue.Clear();
            LogHelper.Write("Shutting down, all requests canceled");
            break;
        }

        currentSession = sessionsQueue.Dequeue();
        LogHelper.WriteFormat("Processing request ID {0}", currentSession.id);
        ProcessSession();
    }
}

这是ProcessSession函数末尾的代码:

代码语言:javascript
复制
{
...        
    currentSession.bBufferResponse = true;
    currentSession.utilCreateResponseAndBypassServer();
    currentSession.oResponse.headers.HTTPResponseStatus = "200 OK";
    currentSession.oResponse["Content-Type"] = "text/html; charset=UTF-8";
    currentSession.oResponse["Cache-Control"] = "private, max-age=0";
    currentSession.utilSetResponseBody(responseBody);
}

我试图篡改会话的计时器和状态,但没有成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-19 15:53:54

当您已经将请求发送到服务器后调用utilCreateResponseAndBypassServer时,就会出现异常。如果您想使用utilCreateResponseAndBypassServer方法,您必须在BeforeRequest处理程序中这样做,而不是在将来的某个时候。同样,在已经连接到服务器之后设置bBufferResponse是没有意义的。

根据您稍后的评论,您对线程如何使用FiddlerCore产生了误解。FiddlerCore在后台线程池线程上处理会话。

  • BeforeRequest触发时,您的代码有机会运行。如果在该方法中调用utilCreateResponseAndBypassServer,则您生成的响应是立即将返回给客户端。
  • 如果没有在utilCreateResponseAndBypassServer中调用BeforeRequest,请求将由FiddlerCore立即发送到服务器,并在可用时将响应返回给客户端。

为了达到您所描述的目的,您不应该尝试执行您自己的线程处理--而是对进入BeforeRequest方法的线程执行所有的工作,并且不要在没有生成所需的响应的情况下离开该方法。您不需要担心挂起UI或诸如此类的东西,因为BeforeRequest运行在后台线程上。如果您的代码中有任何代码需要与UI线程拥有的任何UI进行交互,那么您必须做的唯一的事情就是使用Invoke方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22500054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档