Все еще получение "Формат запроса непризнан для URL-адреса, неожиданно заканчивающегося..."

Привет,

Я смотрел повсюду, и каждый ответ, который я вижу, подсказывает мне добавить следующее в мой web.config:

<system.web>
  <webServices>
    <protocols>
      <add name="HttpGet"/>
      <add name="HttpPost"/>
    </protocols>
  </webServices>
</system.web>

Итак, я сделал это, и я все еще получаю ошибку.

Вот script с моей веб-страницы:

<script>
    $(function () {
        $('#btn').click(
            function () {
                CallHome();
            }
        );
    });

    function CallHome() {
        $.ajax({
            type: "POST",
            url: "HelloWorld.asmx/HelloWorld",
            dataType: "xml",
            data: "{}",
            contentType: "xml",
            success: function(data) {
                alert(data);
            }
        });
    }
</script>

И WebService.vb:

Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports System.Web.Script.Services

<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class HelloWorld
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function HelloWorld() As String
        Return "Hello World"
    End Function

End Class

Я создал совершенно новый веб-проект, чтобы свести мой пример к минимуму. Где-то я придираюсь! Вы можете помочь?

СПАСИБО!

UPDATE: вид нового для скрипача... но вот заголовки из сообщения ajax:

OPTIONS http://localhost:49891/HelloWorld.asmx/HelloWorld HTTP/1.1
Host: localhost:49891
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: null
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16
Access-Control-Request-Headers: Content-Type, Accept
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

И вот заголовки, когда я только до обычной записи формы (что работает):

POST http://localhost:49891/HelloWorld.asmx/HelloWorld HTTP/1.1
Host: localhost:49891
Connection: keep-alive
Referer: http://localhost:49891/HelloWorld.asmx?op=HelloWorld
Content-Length: 0
Cache-Control: max-age=0
Origin: http://localhost:49891
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16
Content-Type: application/x-www-form-urlencoded
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: OriginalGUID=2d9e0303-754d-4871-a875-9e184701e91d

Не уверен, что это помогает...

ОБНОВЛЕНИЕ 2: И вот ответ об ошибке с сервера:

HTTP/1.1 500 Internal Server Error
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 28 Mar 2011 05:06:18 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 4444
Connection: Close

<html>
    <head>
        <title>Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.</title>
        <style>
         body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} 
         p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
         b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
         H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
         H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
         pre {font-family:"Lucida Console";font-size: .9em}
         .marker {font-weight: bold; color: black;text-decoration: none;}
         .version {color: gray;}
         .error {margin-bottom: 10px;}
         .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
        </style>
    </head>

    <body bgcolor="white">

            <span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>

            <h2> <i>Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.</i> </h2></span>

            <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

            <b> Description: </b>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

            <br><br>

            <b> Exception Details: </b>System.InvalidOperationException: Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.<br><br>

            <b>Source Error:</b> <br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code>

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.</code>

                  </td>
               </tr>
            </table>

            <br>

            <b>Stack Trace:</b> <br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code><pre>

[InvalidOperationException: Request format is unrecognized for URL unexpectedly ending in &#39;/HelloWorld&#39;.]
   System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +518909
   System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath) +212
   System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated) +47
   System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) +203
   System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +128
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) +184
</pre></code>

                  </td>
               </tr>
            </table>

            <br>

            <hr width=100% size=1 color=silver>

            <b>Version Information:</b>&nbsp;Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1

            </font>

    </body>
</html>
<!-- 
[InvalidOperationException]: Request format is unrecognized for URL unexpectedly ending in &#39;/HelloWorld&#39;.
   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.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)
   at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
-->

Ответ 1

Я искал решение этой проблемы и нашел этот вопрос, и хотя я бы поделился своим обходом/взломом. Я использую asmx веб-службы в sharepoint и нуждаюсь в том, чтобы метод asmx корректно отвечал на запрос HEAD (видимо, в хранилище itunes выполняется запрос HEAD к URL-адресу RSS-канала, прежде чем выполнять запрос GET для загрузки фида). Из некоторых поисковых запросов я обнаружил, что веб-службы asmx не поддерживают запросы HEAD, которые кажутся правильными http://forums.asp.net/t/1442810.aspx/1

Зная, что asmx и HEAD плохо сочетаются друг с другом, и я не хотел переделывать все в WCF, я попытался выяснить, что такое наименьшее сопротивление. После встречи с командой мы решили создать HTTP-модуль, который будет искать HEAD-запросы для asmx-веб-сервисов и продолжить и выполнить запрос GET на сервере и просто вернуть заголовки. Я знаю, что это немного расточительно, но, похоже, работает так же хорошо, как я ожидал, основываясь на моих тестах в CURL/firebug. Здесь большая часть кода для модуля HTTP.

public class HeadInterceptor : IHttpModule
{
    if (HttpContext.Current.Request.Url.AbsoluteUri.ToLower().Contains("asmx") 
        && HttpContext.Current.Request.HttpMethod == "HEAD")
    {
        WebRequest req = HttpWebRequest.Create(HttpContext.Current.Request.Url);
        req.Method = "GET";
        System.Net.WebResponse resp = req.GetResponse();
        HttpContext.Current.Response.Clear();
        foreach (string k in resp.Headers.AllKeys)
        {
            HttpContext.Current.Response.AddHeader(k, resp.Headers[k]);
        }
        HttpContext.Current.Response.End();
    }
}

Ответ 2

Получаете ли вы "Hello World", когда вы ударяете эту службу из браузера?

Кроме того, вам не хватает конечного "/" в URL-адресе?

Ответ 3

Являются ли ваши веб-службы и ваша веб-страница в том же решении или вы используете два сервера? У меня возникла проблема, когда моя веб-страница вызывала веб-службу на другом сервере. Это вызывает некоторые проблемы с разрешением Javascript.

Если вы используете его на другом сервере, вам может понадобиться создать прокси-сервер в своем решении, содержащем веб-страницу. Эта служба должна вызвать веб-службу в другом решении. На веб-странице вы вызываете локальный веб-сервис, который перенаправляет ваш вызов на тот, который находится на другом сервере.

Ответ 4

Мне не нравится публиковать ответы на проблемы, которые я не полностью понимаю сам, но недавно я столкнулся с этой проблемой, и я подумал, что поделюсь своим довольно своеобразным решением. У меня был веб-сервис, который работал отлично в течение нескольких месяцев и внезапно начал исключать исключение "Формат запроса непризнан...". Служба уже настроена правильно для протоколов GET и POST, так что это не проблема. Я подумал, что, возможно, другой товарищ по команде сделал изменение web.config, но это тоже не так. Решение, с которым я случайно столкнулось, состояло в том, чтобы удалить новый пустой файл web.config в папку, содержащую веб-службу, которые вызывают недопустимую ошибку конфигурации. Удалив пустой файл web.config, веб-сервис волшебным образом снова начал работать. Я не понимаю, почему это сломалось в первую очередь, и я не на 100% понимаю, почему это исправлено, но это произошло. YMMV!

Ответ 5

Конечно, эта почта слишком поздно для Дейва, но может быть полезной для того, кто получает это сообщение.

Я тестировал веб-службу в Internet Explorer и нигде не начинал показывать эту ошибку каждый раз, когда я вызываю веб-службу.

Некоторая отладка после того, как я обнаружил, что я установил нежелательное приложение под названием Lucky Leap. это добавляет расширение для Internet Explorer, которое вызывает сообщение об ошибке.

Я удалил его (Панель управления → Программы (или "Установка и удаление программ" ) → "Удалить программу" ), и она снова смогла вызвать мою веб-службу без ошибок.

Я надеюсь, что это поможет,