【问题标题】:WCF - Exposing a service to both Silverlight and JQuery clientsWCF - 向 Silverlight 和 JQuery 客户端公开服务
【发布时间】:2010-01-15 02:17:14
【问题描述】:

我有一个使用 WCF 的 Web 服务。此 Web 服务有一个方法,我希望可以从两种不同类型的客户端访问该方法。第一种类型的客户端是 Silverlight 应用程序。第二种类型的客户端是依赖于 JQuery 的 AJAX 应用程序。是否可以编写一次该方法,以便两种类型的客户端都可以访问 Web 服务?如果是这样,怎么做?到目前为止,这是我的代码:

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

谢谢!

【问题讨论】:

    标签: jquery wcf silverlight


    【解决方案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)。但是,采用这种方法可能需要做的工作比值得做的多,而且结果可能更难维护。

    【讨论】:

    • 有什么需要添加到 web.config 中的吗?我仍然无法让它工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多