Javascript – appelant ASP.NET WebService – La méthode du serveur 'methodName' a échoué

J'ai essayé de résoudre ce problème pendant un certain temps et je n'ai pas encore réussi. J'ai un WebService ASP.NET basique que j'essaie d'appeler de javascript en tant que tel.

using System; using System.Web; using System.Web.Services.Protocols; using System.Web.Services; using System.Web.Script.Services; namespace RandomWebServices { /// <summary> /// Summary description for WebServices1 /// </summary> [WebService(Namespace = "http://localhost:2900/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] public class WebServices1 : WebService { [WebMethod] public string PieTable(string table) { return table + " - resultant text"; } } } 

Simple … Oui? Alors pourquoi est-ce que lorsque j'essaie de l'appeler à partir de javascript, je reçois ce qui suit:

"Erreur: la méthode du serveur 'PieTable' a échoué."

J'appelle le WebService comme suit:

 <script type="text/javascript"> function CallService() { RandomWebServices.WebServices1.set_defaultSucceededCallback(Callback); RandomWebServices.WebServices1.set_defaultFailedCallback(OnError); RandomWebServices.WebServices1.PieTable("Pie"); return false; } function Callback(result) { alert("asd"); var outDiv = document.getElementById("outputDiv"); if (outDiv == null) { alert("outputDiv not found"); return false; } else { alert("outputDiv found"); outDiv.innerText = result; } return false; } function OnError(result) { alert("Error: " + result.get_message()); } </script> 

J'appelle le javascript à partir de l'objet suivant:

 <input value="Load" onclick="CallService(); return false;" type="button" /> 

J'utilise l'objet ToolkitScriptManager d'AJAX pour faire référence au WebService:

 <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> <Services> <asp:ServiceReference Path="http://localhost:2900/WebServices1.asmx" /> </Services> </asp:ToolkitScriptManager> 

Veuillez aider. Merci d'avance. Marco

Si vous n'utilisez pas .NET 4, vous devez effectuer des entrées de configuration pour activer le service de script. Voir http://msdn.microsoft.com/en-us/library/bb398998(v=VS.90).aspx . Assurez-vous donc que vous avez la section suivante dans web.config.

 <system.web> ... <httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory" validate="false"/> </httpHandlers> ... <system.web> 

Pour la résolution de problèmes, vous pouvez regarder la trace de l'exception par exemple – par exemple,

 function OnError(result) { alert("Error: " + result.get_message()); alert("Stack Trace: " + result.get_stackTrace()); } 

Essayez d'appliquer l'attribut [ScriptMethod] sur la méthode PieTable, cela résout habituellement mes problèmes lors de l'appel de webmethods avec JQuery.

http://msdn.microsoft.com/en-us/library/system.web.script.services.scriptmethodattribute.aspx

 [WebMethod] [ScriptMethod] public string PieTable(string table) { return table + " - resultant text"; } 

J'ai trouvé dans le passé que mettre () après ScriptService dans l'attribut déclaré sur la classe de service Web a apparemment résolu certains problèmes bizarres. Je ne sais pas pourquoi il aurait pu fonctionner, mais ça vaut la peine d'essayer dans votre cas aussi.

c'est à dire

 [WebService(Namespace = "http://localhost:2900/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService()] public class WebServices1 : WebService { [WebMethod] public string PieTable(string table) { return table + " - resultant text"; } }