Формат запроса не распознан для URL, неожиданно заканчивающегося на '/ Convert' через 1-2 дня - PullRequest
29 голосов
/ 24 июня 2011

Я звоню в веб-сервис с помощью вызова Microsoft.XMLHTTP:

var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST", "/xxx/Converter.asmx/Convert", false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send("conversionFolder=" + escape(conversionFolder));
if (xmlhttp.status == 200) {
  xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async = "false";
  xmlDoc.loadXML(xmlhttp.responseText);
  ... more stuff ...
  return str;
}
else {
  alert(xmlhttp.statusCode + " - " + xmlhttp.statusText);
}

Все работает нормально, когда я не забываю добавить протокол HttpPost в локальный web.config:

<?xml version="1.0"?>
<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <webServices>
      <protocols>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
    <compilation debug="false"></compilation>
  </system.web>
  <system.codedom>
  </system.codedom>
  <!--
    The system.webServer section is required for running ASP.NET AJAX under Internet
    Information Services 7.0.  It is not necessary for previous version of IIS.
  -->
  <system.webServer>
  </system.webServer>
</configuration>

Но на одном рабочем сервере происходит сбой после запуска в течение 1-2 дней. Он работает нормально после того, как процесс asp.net был переработан. Он работает в течение 1-2 дней, а затем терпит неудачу с этим:

Exception information:
Exception type: InvalidOperationException
Exception message: Request format is unrecognized for URL unexpectedly ending in '/Convert'.

Request information:
Request URL: https://xxx/xxx/converter.asmx/Convert
Request path: /xxx/converter.asmx/Convert
User host address: 195.50.35.4
User: extranet\kbk
Is authenticated: True
Authentication Type:
Thread account name: NT AUTHORITY\NETWORK SERVICE

Thread information:
Thread ID: 14
Thread account name: NT AUTHORITY\NETWORK SERVICE
Is impersonating: False
Stack trace: at System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response)
at System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath)
at System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated)
at System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Почему он ждет 2 дня, прежде чем потерпит неудачу? И что я могу сделать, чтобы предотвратить его сбой? Это как-то связано с тем, что этот сервер работает в режиме HTTPS?

Ответы [ 3 ]

1 голос
/ 25 июня 2013

Что такое фреймворк Dot Net?IIS 6 или 7?Вы пытались добавить <add name="HttpGet"/> в разделе протоколов.Кажется, некоторые люди справились с этой проблемой.(но не для всех) ссылка 1 ссылка 2 Также проверьте, где вы развертываете свой сайт.Это на корневом уровне вашего веб-сервера или в виртуальной папке.Иногда это может быть наследование некоторых значений конфигурации из сайтов родительского уровня или файла machine.config.

В противном случае это может быть связано с некоторой утечкой памяти в вашем коде.Что вы делаете с загруженным XML.Также я предполагаю, что вы анализируете действительный XML.

1 голос
/ 09 октября 2013

Похоже, есть исправление, доступное для повторного использования пула приложений, исправляет проблему в течение нескольких дней http://support.microsoft.com/kb/2783777/en-us

0 голосов
/ 05 сентября 2012

Похоже, протоколы по умолчанию отключены . На подобный вопрос уже ответили в Stackoverflow. Отметьте эту ссылку и соответствующий вопрос

...