2010-01-14 86 views
1

我有一個使用WCF的Web服務。這個Web服務有一個我想從兩種不同類型的客戶端訪問的方法。第一種類型的客戶端是Silverlight應用程序。第二種類型的客戶端是依賴於JQuery的AJAX應用程序。是否可以編寫一次這樣的方法,以便這兩種類型的客戶端都可以訪問Web服務?如果是這樣,怎麼樣?這是我迄今的代碼:WCF - 將服務公開給Silverlight和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; 
    } 
} 

謝謝!

回答

1

如果我是你,我會使用兩個不同的接口 - 一個用於Silverlight(傳統的WS通信),另一個用於jQuery/JSON。

服務類(你的情況myService)然後將實現這兩​​個接口。例如:

[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; 
    }   
} 

我看你沒有指定明確的C#接口來保存遠程訪問的方法。考慮這樣做,正如我在上面的代碼中所展示的那樣。它有助於您的WCF設計變得更加複雜。


這是可能的只是寫一組的方法,然後使用自定義的ServiceHost,以公開的接口既JSON和WS(See example)。但是採取這種方法可能需要花費更多的努力,結果可能不易維護。

+0

是否有任何需要添加到web.config?我仍然無法工作。 – user70192 2010-01-17 13:33:30

相關問題