Comment appeler WebMethod?
Je suis en train d'appeler un WebMethod
à partir de JavaScript. Pour l'instant j'ai:
La EMSWebService.asmx:
namespace EMSApplication.Web.WebServices
{
///<summary>
///Holds the Webservice methods of EMSApplication
</summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class EMSWebService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
Dans la page aspx, j'ai ajouté les points suivants:
<asp:ScriptManager ID="ScriptManager" runat="server">
<Services>
<asp:ServiceReference Path="~/WebServices/EMSWebService.asmx" />
</Services>
</asp:ScriptManager>
<input onclick="callWebMethod();" id="btn" type="button" value="Click Me" />
Et le JavaScript est:
<script type="text/javascript">
function callWebMethod() {
EMSApplication.Web.WebServices.EMSWebService.HelloWorld(OnComplete, OnError);
}
function OnComplete(result) {
alert(result);
}
function OnError(result) {
alert(result.get_message());
}
</script>
Mais la méthode n'est pas en cours d'exécution. Je suis d'erreur JavaScript suivant:
EMSApplication pas défini.
Est-ce que je suis absent? Ai-je besoin de faire quelque chose d'autre configuration?
Le Projet de la structure est représentée ci-dessous:
JavaScript et les composants dans la Connexion.aspx.
Est là toute l'importance de l'URL de [WebService(Namespace = "http://tempuri.org/")]
Edit:
J'ai aussi essayé en utilisant jQuery et modifier la page aspx:
$(document).ready(function () {
$("#btn").click(function () {
$.ajax({
type: "POST",
url: "../WebServices/EMSWebService.asmx/HelloWorld",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
alert(response.d);
},
failure: function (msg) {
alert(msg.d);
}
});
return true;
});
});
J'ai écrit System.Diagnostics.Debug.WriteLine("Hello World");
à l'intérieur de la WebMethod
, il est en cours d'exécution que c'est a dire qu'il est l'impression de "Hello World" dans la Fenêtre de Sortie de Visual Studio, mais je n'obtiens pas de message d'alerte.
Pouvez-vous vérifier que le scripthandlerfactory est définie dans le web.config?
Non, je n'ai pas défini de scripthandlerfactory dans le web.config. Que dois-je faire?
Lire ici msdn.microsoft.com/en-us/library/bb398998.aspx cette page va sur ce que vous devez faire pour appeler les services web à partir d'un script.
vous pouvez poster votre réponse. Afin que je puisse l'accepter. Il est résolu après l'utilisation de
<add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory" validate="false"/>
dans le <httpHandlers/>
de <system.web/>
. Je vous remercie beaucoup.OriginalL'auteur Tapas Bose | 2012-03-24
Vous devez vous connecter pour publier un commentaire.
Vous devez vous assurer que vous avez le scripthandlerfactory définis dans votre site web.config...plus d'ici http://msdn.microsoft.com/en-us/library/bb398998.aspx
Tapas, l'espace de noms de votre service est de fournir aux consommateurs de votre service un service unique emplacement. C'est pour empêcher les services ne s'opposent pas si ils ont le même nom de service. Avant d'aller en production, vous voulez modifier l'espace de noms à quelque chose de plus unique. Plus sur le sujet ici... social.msdn.microsoft.com/forums/en-US/asmxandxml/thread/...
OriginalL'auteur Jeremy Howard
Je voulais répondre à la question directement.
J'ai un
WebMethod
, assis dans unSomePage.aspx
fichier:La question est: Comment dois-je appeler cette méthode web? Puisque c'est HTTP, la réponse est la pour HTTP POST pour le serveur:
La critique points importants à noter sont les suivants:
POST
(GET
ne fonctionnera pas)vous spécifiez le nom de la méthode vous sur la page aspx en tant que SomePage.aspx/[MethodName]. Dans ce cas:
vous passe les paramètres de la méthode JSON. Cette méthode a un paramètre de chaîne:
shiftName
. Cela signifie que j'ai construit le JSON:à la demande du JSON type de contenu, vous devez spécifier le
Content-Type
en-tête de requête:Étant donné que mon exemple WebMethod prend simplement le texte fourni, ajoute
hi there
, et retourne cette chaîne, la réponse du serveur web est:Où le corps de la réponse HTTP est également une chaîne JSON, avec une propriété unique appelée
d
. Je ne sais pas où ils ont obtenud
, mais il est là.C'est comment vous appelez une WebMethod à l'aide de http (par exemple, langage d'assemblage, COM, C#, Java, Delphi).
La question la plus commune est de savoir comment vous l'appelez de la part du client à l'aide de jQuery.
OriginalL'auteur Ian Boyd