2015-04-13 4 views
0

У меня есть приложение .NET 2.0, которое я заинтересован в переносе для работы в Linux под mod_mono.System.Threading.ThreadAbortException в прокси XHR, запущенном на mod_mono (3.12.1)

Часть приложения - прокси XHR, который обеспечивает доступ к различным каналам передачи данных, предоставляемым интерфейсу. Этот прокси-скрипт гарантирует, что пользователь имеет действительный сеанс, а затем удостоверяется, что пользователь имеет право на данные, которые они пытаются извлечь. Наконец, если потребуется, прокси преобразует XML в JSON с помощью Newtonsoft.

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/поймать/наконец блокировать поведение меняется немного, но конечный результат все равно ошибка. На этот раз голая ошибка с ошибкой 400.

Я действительно не знаю, с чего начать, поэтому я предполагаю, что у меня есть два вопроса:

  1. Что вызывает эту ошибку?
  2. Как я могу получить более подробную диагностическую информацию?

ответ

1

Самая возможная причина в том, что у вас есть тайм-аут во время обработки запроса. Увеличьте время ожидания в файле 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 { 
Смежные вопросы