2009-07-27 5 views
0

J'essaie de faire fonctionner ASP.NET (Framework 3.5), AJAX et JSON. J'ai deux questions à ce sujet. Ce premier est, quand j'ajoute l'étiquette ci-dessous comme requis par ASP.NET:Besoin d'aide avec ASP.NET (3.5) ScriptManager pour appeler les données JSON WCF via AJAX

[AspNetCompatibilityRequirements(RequirementsMode = 
     AspNetCompatibilityRequirementsMode.Allowed)] 

Je trouve que je ne peux pas ajouter au-dessus d'une déclaration d'interface, seule une classe. Je veux que ce code soit une interface. Quelqu'un peut-il me dire ce que je fais mal? L'erreur est la suivante:

Attribut AspNetCompatibilityRequirements n'est pas valide sur ce type de déclaration. Il est uniquement valable pour les déclarations 'class'.

[ServiceContract(Namespace = "API.Trade")] 
    [AspNetCompatibilityRequirements(RequirementsMode = 
     AspNetCompatibilityRequirementsMode.Allowed)] 
    public interface ITradeService 
    { 
     [OperationContract(Name = "GetAllCategories")] 
     string GetCategories(string itemtype, string keywordstring); 

     [OperationContract(Name = "GetCategoryByNodeLevel")] 
     string GetCategories(int NodeLevel); 

     [OperationContract] 
     int GetTrades(string KeywordString, string TradeType); 
    } 

LA DEUXIÈME question est, dans la balise ASPX ScriptManager:

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
<Services> 
<asp:ServiceReference Path="?" /> 
</Services> 
</asp:ScriptManager> 

Je remarque que le chemin = attribut doit pointer vers un fichier .SVC. Jusqu'à présent, j'ai utilisé avec succès une bibliothèque de classes WCF pour accomplir ce dont j'avais besoin. La bibliothèque de classes contient les fichiers Trade.cs, TradeService.cs et ITradeService.cs que je compile, puis la référence en tant que service Web dans mon projet Web.

Alors, à quoi devrait "Path =" pointer? Ou, que dois-je ajouter? J'apprends comme je vais et j'apprécie votre patience. Merci d'avance.

Répondre

0

En ce qui concerne la première question. L'attribut est défini pour n'être applicable qu'à une classe, vous ne pouvez donc pas le déclarer sur autre chose.

Le chemin doit pointer vers le point de terminaison sur lequel votre service écoute (par exemple,/services/myserivce).

0

Le chemin d'accès doit être le point de terminaison de service pour un service HTTP: http://host.example.com/tradeservice.svc/method.

Vous ne pouvez appliquer l'attribut qu'à une implémentation de l'interface (une classe) et non de l'interface elle-même.

0

Quant à votre deuxième réponse. Je crois que le chemin doit pointer vers un point de terminaison webservice réel (.svc ou l'ancien .. j'oublie au-dessus de ma tête, désolé).

Vous pouvez créer un WebService, TradeService.svc et implémenter l'interface ITradeService. En tant que variable privée sur le service créer une instance de TradeService, et l'utiliser comme proxy ... comme si

private TradeService _proxy; 

public string MyMethod(){ 
    _proxy.MyMethod(); 
} 

make sence.

+0

Salut Aquillin, Merci pour cela. Je comprends l'essentiel de ce que vous dites, mais je commence à comprendre comment afficher les interfaces que j'ai créées dans ma bibliothèque de classes. Je suppose que j'ai besoin d'ajouter une directive USING à ITradeService et puis faire une référence aux méthodes d'interface (MyMethod) dans la DLL que je peux ensuite utiliser dans "_proxy.MyMethod". Je ne suis pas vraiment sûr de la façon de procéder - pouvez-vous me montrer à quoi ressemblera le code pour ITradeService après avoir ajouté la bibliothèque de classes WCF que j'ai? Je pense que j'ai fait du sens ici ... –

0
  • AspNetCompatibilityRequirementsAttribute.RequirementsMode n'est pas un attribut obligatoire et peut être utilisé pour régler le mode d'hébergement programme ou vous pouvez faire la même chose dans webconfig en utilisant tag serviceHostingEnvironment:
 
    <system.serviceModel> 
    <serviceHostingEnvironment ..> 
    </serviceHostingEnvironment> 
    </system.serviceModel> 

Référence: http://msdn.microsoft.com/en-us/library/system.servicemodel.activation.aspnetcompatibilityrequirementsattribute.requirementsmode(v=vs.110).aspx

  • Vous devriez ajoutez un hôte de service (.svc) dans votre projet en ajoutant manuellement TradeService.svc. Vous pouvez également faire la même chose en ajoutant un nouvel élément> Service WCF mais cela remplacera vos fichiers cs de service. Une fois que vous avez votre fichier svc ajouté vous pouvez ajouter la ligne suivante:
 
    <%@ ServiceHost Language="C#" Debug="true" Service="TradeService" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %> 

Notez que WebScriptServiceHostFactory ajoutera automatiquement point final ASP.NET Ajax à votre service. Enfin, pointez votre attribut "path" vers ce "TradeService.svc" nouvellement créé.

Vous pouvez tester votre service en vous rendant http://localhost.me/TradeService.svc

Et le soutien Ajax peut être testé à http://localhost.me/TradeService.svc/jsdebug

Référence: http://berniecook.wordpress.com/2012/01/08/consuming-a-wcf-service-with-jquery-or-scriptmanager/

SourceCode: https://docs.google.com/open?id=0Bz2usIBCcor0NDQxZDc2ODYtNTUzMi00OTRlLTlhOGMtMGI4Y2RhNGIzYWNj

Questions connexes