2012-02-06 11 views
0

Je suis en train d'accéder à un service Web .Net (.asmx) que j'ai créé et qui fonctionne sous cet endroit: http://sebtest.somee.com/page/webservice/PositionService.asmxErreur consommation service Web .NET avec jQuery

Invoquer le service fonctionne localement bien, mais consommer avec jQuery sur le serveur échoue malheureusement. Le service est écrit de la manière suivante:

namespace WcfService1 
{ 
[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
// Below line allows the web service to be called through HTTP protocol. 
[ScriptService] 
public class ServiceImpl : System.Web.Services.WebService, IService1j 
{ 

    [WebMethod] 
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)] 
    public PositionReturnType getLastLocation(){ 
     . 
     . 

J'ai aussi créé une page web asp.net que lorsque commencé tente directement accéder à la méthode getLastLocation. La page peut être trouvée ici: http://sebtest.somee.com/page/

Comme vous pouvez le voir, je reçois seulement une erreur.

Le code de la page Web est celui-ci:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head runat="server"> 
<title>Call web service test</title> 
<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /> 
<asp:ContentPlaceHolder ID="HeadContent" runat="server"> 
</asp:ContentPlaceHolder> 

<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.min.js"></script> 

<script type="text/javascript"> 

    function CallService() { 

     $.ajax({ 
      type: "POST", 
      url: "http://sebtest.somee.com/page/webservice/PositionService.asmx?op=getLastLocation", 
      dataType: "json", 
      success: function (data, textStatus, jqXHR) { 
       alert('worked'); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       alert(jqXHR + ' - ' + textStatus + ' - ' + errorThrown); 
      } 
     }); 

    } 
</script> 
</head> 
<body onload="CallService()"> 
<form runat="server"> 

Ce que je pris conscience est que la plupart des exemples utilisent la forme d'URL « Service/NomMéthode » que mon service ne répond pas à. Au lieu de cela, la méthode peut être consultée à l'emplacement sebtest.somee.com/page/webservice/PositionService.asmx?op=getLastLocation Cela pourrait-il être un problème quelconque?

Je serais heureux pour toute aide que vous pouvez me fournir! Peut-être pourriez-vous me donner un exemple en appelant mon service.

Merci beaucoup à l'avance pour votre aide :)

Sebastian


Edit: je me rendis compte maintenant que je peux ouvrir le webservice manuellement les requêtes HTTP publierez HTTP en changeant le web. fichier de configuration. Je l'ai fait et je tenté d'accéder au webservice maintenant d'une course de page Web localement sur mon bureau de la façon suivante:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 

<script type="text/javascript"> 

    function CallService() { 

     $.ajax({ 
      type: "GET", 
      url: "http://sebtest.somee.com/page/webservice/PositionService.asmx/getLastLocation?", 
      dataType: "xml", 
      error: function (xhr, textStatus, errorThrown) { 
       alert('nooo ' + xhr + ' - ' + textStatus + ' - ' + errorThrown); 
      }, 
      success: function (data, textStatus, jqXHR) { 
       alert('jaaa ' + data + " - " + textStatus + " - " + jqXHR); 
      } 
     }); 

    } 

Unfortunatelly cela conduit encore à la fonction d'erreur à appeler. En chrome aucun texte d'erreur n'est affiché, IE dit "pas de transport". Cependant, j'ai aussi utilisé Fiddler2 et là, je reçois la réponse suivante qui est exactement ce que je dois:

HTTP/1.1 200 OK 
Cache-Control: private, max-age=0 
Content-Type: text/xml; charset=utf-8 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Tue, 07 Feb 2012 13:06:37 GMT 
Content-Length: 266 

<?xml version="1.0" encoding="utf-8"?> 
<PositionReturnType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> 
<longtitude>3</longtitude> 
<latitude>9</latitude> 
</PositionReturnType> 

Peut-être que cela peut vous aider à déterminer mon problème? Je veux dire évidemment que les données sont renvoyées correctement comme prévu à mon PC de bureau mais la fonction d'erreur est appelée au lieu du succès.

Merci!

+0

Pourquoi avez-vous un Chemin d'accès asmx pour un service Web WCF? – jrummell

Répondre

0

Changez votre URL à "http://sebtest.somee.com/page/webservice/PositionService.asmx/getLastLocation" et voyez si cela fonctionne pour vous.

+0

Je l'ai déjà essayé, mais ça ne change rien malheureusement. – user1192475

0

Je n'ai pas vraiment trouvé de réponse à mes problèmes, mais j'ai plutôt utilisé une approche différente qui est décrite ici (http://www.codeproject.com/Articles/223572/Calling-Cross-Domain-WCF- service-using-Jquery-Java) et cela fonctionne parfaitement bien.

Une dernière note de conseils si vous considérez aussi en utilisant cette approche, vous trouverez peut-être utile d'utiliser cette configuration web.config instaed du décrit un:

<?xml version="1.0"?> 
<configuration> 

<system.web> 
<compilation debug="true" targetFramework="4.0" /> 
<authentication mode="None"> 
</authentication> 
</system.web> 
<system.serviceModel> 

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/> 
<standardEndpoints> 
    <webScriptEndpoint> 
    <standardEndpoint name="" crossDomainScriptAccessEnabled="true"/> 
    </webScriptEndpoint> 
</standardEndpoints> 

<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
     <serviceMetadata httpGetEnabled="true"/> 
     <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
</system.serviceModel> 
<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 

Questions connexes