2011-03-27 28 views
10

Saludos,sigue recibiendo "Formato de Solicitud es reconocido por la URL de forma inesperada que termina en ..."

He buscado por todas partes y cada respuesta que veo me dice que ponga lo siguiente en mi web.config:

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

Lo he hecho y sigo recibiendo el error.

Aquí es el guión de mi página web:

<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> 

Y el WebService.vb es:

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 

He creado un nuevo proyecto web de la marca a recortar mi ejemplo al mínimo. ¡En algún lugar estoy jodiendo! ¿Puede usted ayudar?

GRACIAS!

ACTUALIZACIÓN: Tipo de nuevo a Fiddler ... pero aquí están las cabeceras del mensaje: 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 

y aquí están las cabeceras cuando acabo a un puesto de forma normal (que funciona):

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 

No estoy seguro si eso ayuda ...

ACTUALIZACIÓN 2: Y aquí está la respuesta de error del servidor:

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) 
--> 
+0

por favor incluyen el error completo. –

+0

IIS 7? Si es así, la configuración de http debe establecerse en la sección de web.config –

+0

bien ... He estado tratando de descubrir cómo agregar esto a la configuración de la sección system.webserver y no puedo encontrar eso. Cuando los agrego obtengo un error. ¡Gracias! – Dave

Respuesta

0

¿Obtiene "Hello World" cuando acierta a ese servicio desde el navegador?

Además, ¿te falta un "/" final en la url?

+0

Sí, cuando abro el servicio desde el navegador obtengo "Hello World". Y probé el final "/" y no tuvo efecto. – Dave

0

¿Su servicio web y su página web están en la misma solución o está ejecutando dos servidores? Tuve el problema cuando mi página web llamaba a un servicio web en otro servidor. Esto causa algunos problemas de permisos con Javascript.

Si está ejecutando en otro servidor, es posible que deba crear un servicio web proxy en su solución que contiene la página web. Este servicio necesita llamar al servicio web en su otra solución. Desde su página web, llame al servicio web local que redirigirá su llamada al que está en el otro servidor.

2

Estaba buscando una solución a este problema y encontré esta pregunta, y aunque compartiría mi solución/pirateo. Estoy usando servicios web asmx en sharepoint y necesitaba un método asmx para responder correctamente a una solicitud HEAD (al parecer, iTunes hace una solicitud HEAD a tu URL de feed RSS antes de hacer una solicitud GET para descargar el feed). De hacer algo de google encontré que los servicios web de asmx no son compatibles con las solicitudes HEAD, que parece ser correcto http://forums.asp.net/t/1442810.aspx/1

Sabiendo que asmx y HEAD no funcionaban bien juntas y no quería volver a hacer todo en WCF, Intenté descubrir el truco de la menor resistencia. Después de consultar con el equipo, decidimos crear un módulo HTTP que buscaría las solicitudes HEAD para los servicios web de asmx y continuar y hacer la solicitud GET en el servidor y simplemente devolver los encabezados. Sé que esto es un desperdicio, pero parece funcionar tan bien como esperaba basado en mis pruebas en CURL/firebug. Aquí está la mayor parte del código para el módulo 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(); 
    } 
} 
0

odio para publicar respuestas a problemas que no entiende por completo a mí mismo, pero recientemente me encontré con este problema también y yo pensé en compartir mi solución bastante peculiar.

Tuve un servicio web que funcionó bien durante meses y de repente comencé a lanzar la excepción "El formato de solicitud no se reconoce ...". El servicio ya estaba configurado correctamente para los protocolos GET y POST, por lo que ese no era el problema. Pensé que tal vez otro compañero de equipo había realizado un cambio en la red. Pero ese tampoco era el caso.

La solución, que encontré por accidente, fue colocar un nuevo archivo web.config vacío en la carpeta que contenía el servicio web que causaba un error de configuración no válido. Al eliminar el archivo web.config vacío, el servicio web mágicamente comenzó a funcionar nuevamente. No entiendo por qué se rompió en primer lugar y no estoy 100% claro sobre por qué esto lo solucionó, pero lo hizo. YMMV!

+2

Lo que terminaste haciendo fue reciclar tu grupo de aplicaciones. Eso fue lo que solucionó el problema. Aunque podría fallar nuevamente. –

+0

@JonathanvandeVeen Me imagino que reciclé el grupo de aplicaciones en algún momento durante el proceso de resolución de problemas, pero ha pasado tanto tiempo desde que sucedió esto que no recuerdo los pasos preliminares que tomé, por lo que puede que tenga razón. – joelmdev

+0

@JonathanvandeVeen, ¿cómo reciclar el grupo de aplicaciones en dev? –

0

Seguramente, esta publicación llega demasiado tarde para Dave, pero podría ser útil para alguien que está recibiendo este mensaje.

Estaba probando un servicio web en Internet Explorer y de ningún lugar se empieza a mostrar este error cada vez que invoco un servicio web.

Depuración después de encontrar que instalé una aplicación no deseada llamada Lucky Leap. esto agrega una extensión a Internet Explorer que desencadena el mensaje de error.

Lo desinstalé (Panel de control -> Programas (o Agregar/Quitar programas) -> Desinstalar un programa) y pude volver a llamar a mi servicio web sin errores.

Espero que esto ayude,

Cuestiones relacionadas