2012-08-09 50 views
7

me sale el siguiente error "nombre de método de servicio Web no es válido" cuando intento llamar WebMethod desde JavaScriptWeb nombre de método de servicio no es válida

System.InvalidOperationException: Servicio Web SaveBOAT nombre del método no es válido . en System.Web.Services.Protocols.HttpServerProtocol.Initialize() en System.Web.Services.Protocols.ServerProtocol.SetContext (Tipo Tipo, HttpContext contexto, HttpRequest solicitud, HttpResponse de respuesta) en System.Web.Services.Protocols .ServerProtocolFactory.Create (tipo tipo, HttpContext contexto, HttpRequest petición, la respuesta HttpResponse, Boolean & abortProcessing) Código

HTML:

<asp:LinkButton runat="server" ID="lnkAddBoat" OnClientClick="javascript:AddMyBoat(); return false;"></asp:LinkButton> 

JS Código:

function AddMyBoat() { 
      var b = document.getElementById('HdnControlId').value; 

      jQuery.ajax({ 
       type: "GET", 
       url: "/AllService.asmx/SaveBOAT", 
       data: { Pid: b }, 
       contentType: "application/text", 
       dataType: "text", 
       success: function(dd) { 
        alert('Success' + dd); 
       }, 
       error: function(dd) { 
        alert('There is error' + dd.responseText); 
       } 
      }); 
} 

código C# (método Web en el archivo AllService.asmx)

[WebMethod] 
public static string SaveBOAT(int Pid) 
{ 
    // My Code is here 
    //I can put anythng here 
    SessionManager.MemberID = Pid; 
    return ""; 
} 

He intentado todas las soluciones que se encuentran en desbordamiento de pila y ASP.NET site.but ninguno de ellos trabajaba para yo.

Respuesta

13

Fue un tonto Error. eliminar "Estático" de la declaración del método.

[WebMethod] 
    public string SaveBOAT(string Pid) 
    {   
     SessionManager.MemberID = Pid; 
     return ""; 
    } 
+0

en mi caso, palabra clave pública falta – Naga

0

¿Has añadido U ServiceReference clase. Compruebe this una vez. Basado en su comentario que puedo decir qué hacer

1

Trate de usar esto, creo que tipo de datos debe ser JSON

 jQuery.ajax({ 
      type: "POST", // or GET 
      url: "/AllService.asmx/SaveBOAT", 
      data: { Pid: b }, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json" 
      success: function(dd) { 
       alert('Success' + dd); 
      }, 
      error: function(dd) { 
       alert('There is error' + dd.responseText); 
      } 
     }); 

Y en C# cambio código PID de cadena

[WebMethod] 
    public static string SaveBOAT(string Pid) 
    {   
     SessionManager.MemberID = Pid; 
     return ""; 
    } 
+0

He intentado su código y he recibido este error "Método web desconocido SaveBOAT.
Nombre del parámetro: methodName" – ravidev

+0

Elimine la estática de "public static string SaveBOAT (string Pid)". – Rohit

2

En mi caso, el error fue que el método de servicio Web se declaró "privado" en lugar de "público"

+0

¿Sabe por qué lo fuerza a ser público? – John

+0

@John ¿Cómo esperaría llamar a un método de servicio web si no fuera público? – Archer

+0

Por supuesto, fue un error de copiar/pegar;) – Alessio

0

también me enfrenté al problema similar. La solución incluye verificar todo lo relacionado con asegurar que todos los nombres, los parámetros se pasan correctamente ya que muchos han respondido. Asegúrese de que el nombre del método web al que estamos llamando en la página de la interfaz de usuario esté escrito correctamente, los datos, los tipos de datos sean correctos, etc. En mi caso, escribí mal el nombre del método web en mi llamada ajax. Funciona bien una vez que encontré y corrigí el nombre correctamente.
Por Ej: En asmx archivo de clase, este es el nombre del método "IsLeaseMentorExistWithTheSameName" pero cuando me llamaron desde la interfaz de usuario así es como me llamaron:

var varURL = <%=Page.ResolveUrl("~/Main/BuildCriteria.asmx") %> + '/IsLeaseMentorExistWithSameName'; 

en cuenta que la palabra "El" no se encuentra. Eso fue un error y lo corregí y funcionó bien.

Cuestiones relacionadas