2010-01-14 8 views
1

J'ai un service Web qui utilise WCF. Ce service Web a une méthode unique que je veux être accessible à partir de deux types de clients différents. Le premier type de client est une application Silverlight. Le deuxième type de client est une application AJAX qui repose sur JQuery. Est-il possible d'écrire la méthode une fois de sorte que les deux types de clients peuvent accéder au service Web? Si c'est le cas, comment? Voici mon code jusqu'à présent:WCF - Exposer un service aux clients Silverlight et JQuery

[ServiceContract(Namespace = "")] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class myService 
{ 
    [OperationContract] 
    public List<string> SearchByName(string name) 
    { 
     List<string> results = new List<string>(); 
     results.Add("Bill"); 
     results.Add("John"); 
     // more retrieved through database hit. 
     return results; 
    } 
} 

Merci!

Répondre

1

Si j'étais vous, j'utiliserais deux interfaces distinctes: une pour Silverlight (communications WS traditionnelles) et une pour jQuery/JSON.

La classe de service (myService dans votre cas) implémenterait les deux interfaces. Exemple:

[ServiceContract(Namespace="urn:Cheeso.Samples")] 
public interface IJsonService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "GET", 
       RequestFormat=WebMessageFormat.Json, 
       ResponseFormat = WebMessageFormat.Json, 
       UriTemplate = "search/{name}")] 
    List<String> JsonSearchByName(String name); 
} 

[ServiceContract(Namespace="urn:Cheeso.Samples")] 
public interface IWsService 
{ 
    [OperationContract(Name="SearchByName")] 
    List<String> WsSearchByName(String name); 
} 


[ServiceBehavior(Name="MultiFacedService", 
       Namespace="urn:Cheeso.Samples")] 
public class myService : IJsonService, IWsService 
{ 
    public List<String> JsonSearchByName(String name) 
     { return SearchByName_Impl(name); } 
    public List<String> WsSearchByName(String name) 
     { return SearchByName_Impl(name); } 
    public List<String> SearchByName_Impl(String name) 
    { 
     var results = List<string>(); 
     // fill results here... 
     return results; 
    }   
} 

Je vois que vous n'avez pas spécifié d'interface C# explicite pour contenir les méthodes accessibles à distance. Pensez à faire cela, comme je l'ai montré dans le code ci-dessus. Cela aide vos conceptions WCF à devenir plus complexes.


Il est possible d'écrire un seul ensemble de méthodes, puis utiliser un ServiceHost personnalisé pour l'interface expose à la fois comme JSON et WS (See example). Mais il peut être plus de travail que cela vaut la peine de prendre cette approche, et le résultat peut être moins maintenable.

+0

Y a-t-il quelque chose qui doit être ajouté au web.config? Je n'arrive toujours pas à le faire fonctionner. – user70192

Questions connexes