c# - 在 mod_mono (3.12.1) 上运行的 XHR 代理中的 System.Threading.ThreadAbortException

标签 c# asp.net linux mono mod-mono

我有一个 .NET 2.0 应用程序,我有兴趣将其移植到 Linux 上的 mod_mono 下运行。

应用程序的一部分是 XHR 代理,它提供对提供给前端的各种数据馈送的访问。这个代理脚本确保用户有一个有效的 session ,然后确保用户有权访问他们试图检索的数据。最后,如果请求,代理将使用 Newtonsoft 将 XML 转换为 JSON。

此服务的 URL 如下所示:

/ApiProxy.aspx?url=http%3A%2F%2Fexample%2Fapi%2Fservice

出于某种原因,我无法让这个软件在 mod_mono 下运行。它会产生以下错误:

System.Threading.ThreadAbortException
Thread was being aborted
Description: HTTP 500.Error processing request.
Details: Non-web exception. Exception origin (name of application or object): mscorlib.
Exception stack trace:
  at (wrapper managed-to-native) System.Threading.Thread:Abort_internal (System.Threading.InternalThread,object)
  at System.Threading.Thread.Abort (System.Object stateInfo) [0x00000] in <filename unknown>:0 
  at System.Web.HttpResponse.End () [0x00000] in <filename unknown>:0 
  at ASP.apiproxy_aspx.__RenderTree (System.Web.UI.HtmlTextWriter __output, System.Web.UI.Control parameterContainer) [0x00000] in <filename unknown>:0 

我真的不知道这个错误是怎么回事。

它似乎没有引用我的任何代码,也没有提供任何关于问题可能出在哪里的提示。我的一个线索是,有一些大块似乎与该问题有关:

using(SqlConnection con = new SqlConnection(myConnectionString))
{
    con.Open();

    //1) determine if the user is allowed to get the service
    //2) retrieve the content the user is requesting
    //3) convert the content to json

    } catch (Exception ex){
        throw new Exception("Unhandled exception", ex);
    } finally {
        if(con != null)
            con.Close();
    }
}

当我注释掉 try/catch/finally block 时,行为发生了一点变化,但最终结果仍然是错误。这次是裸露的 400 无效请求错误。

我真的不知道从哪里开始,所以我想我有两个问题:

  1. 导致此错误的原因是什么?
  2. 如何获得更好的诊断信息?

最佳答案

最可能的原因是您在处理请求时超时。在 web.config 中增加超时,错误应该消失。

<location path="apiproxy.aspx">
    <system.web>
        <httpRuntime executionTimeout="180"/> <!-- set large value here -->
    </system.web>
</location>

这里是单声道中HttpResponse.End ()方法的代码https://github.com/mono/mono/blob/master/mcs/class/System.Web/System.Web/HttpResponse.cs#L631-L638

    public void End ()
    {
        if (context == null)
            return;

        if (context.TimeoutPossible) {
            Thread.CurrentThread.Abort (FlagEnd.Value);
        } else {

关于c# - 在 mod_mono (3.12.1) 上运行的 XHR 代理中的 System.Threading.ThreadAbortException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29614517/

相关文章:

c# - 具有空外键的 EF 导航属性

c# - 将用户控制类传递给主机页面

linux - 如何编辑@INC 条目以包含模块的新目录

c# - IEnumenator 出问题了

c# - ASP.NET 4.5 客户端和服务器无法通信,因为它们不具备通用算法

c# - 从 IdentityServer4 openIdConnect 获取 IsPersistent 设置

c# - Azure Blob 存储的文件大小限制?

asp.net - 在 formview 插入命令后重定向

c - Glib:DBUS 属性中的 NULL

java - 向 Linux 大师们致敬。权限异常