我有一个.NET 2.0应用程序,我有兴趣移植到mod_mono下的Linux上运行。
应用程序的一部分是XHR代理,它提供对提供给前端的各种数据馈送的访问。此代理脚本确保用户具有有效会话,然后确保用户有权获取他们尝试检索的数据。最后,如果请求,代理将使用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块时,行为会发生一些变化,但最终结果仍然是错误。这次赤裸裸的400无效请求错误。
我真的不知道从哪里开始,所以我猜我有两个问题:
答案 0 :(得分:1)
最可能的原因是您在处理请求时遇到超时。在web.config中增加超时并且错误应该消失。
<location path="apiproxy.aspx">
<system.web>
<httpRuntime executionTimeout="180"/> <!-- set large value here -->
</system.web>
</location>
此处为单https://github.com/mono/mono/blob/master/mcs/class/System.Web/System.Web/HttpResponse.cs#L631-L638
中HttpResponse.End ()
方法的代码
public void End ()
{
if (context == null)
return;
if (context.TimeoutPossible) {
Thread.CurrentThread.Abort (FlagEnd.Value);
} else {