代码之家  ›  专栏  ›  技术社区  ›  Josh

使用一个Web服务的多个客户端的最佳体系结构实践

  •  2
  • Josh  · 技术社区  · 14 年前

    我有一个Web服务和多个客户端将使用它。MVC 2.0网站、WinForms应用程序以及可能的移动应用程序。

    我理解,对于移动应用程序,每个应用程序都需要在内部访问和管理Web服务连接。但是我该如何处理.NET应用程序呢?我正在为请求对象和返回类型使用复合类型。这是一个样品。

    我最初的想法是有一个包装类,它引用Web服务,只是一个包装。然后每个项目只需要调用包装类,而连接和凭证只需要在web配置中配置。

    这是我的抽象要求。我拥有每个请求所需的所有共享属性。

    [DataContract]
        public abstract class RequestBase : IRequest
        {
            #region IRequest Members
    
            [DataMember]
            public string ApiKey { get; set; }
    
            [DataMember]
            public string ApiPassword { get; set; }
    
            [DataMember]
            public int PageSize { get; set; }
    
            [DataMember]
            public int PageIndex { get; set; }
    
            #endregion
    
            public RequestBase() : this(String.Empty, String.Empty) { }
    
            public RequestBase(string apiKey, string apiPassword)
            {
                ApiKey = apiKey;
                ApiPassword = apiPassword;
            }
        }
    

    然后是从我的基类继承的类。

    [DataContract]
        public class CustomerRequest : RequestBase
        {
            [DataMember]
            public int Id { get; set; }
        }
    

    这是我的回应对象。我使用泛型是因为每个响应都是相同的,除了结果集的类型。

    [Serializable]
    public class Response<T>
    {
        public IEnumerable<T> Results { get; set; }
        public int TotalResults { get; set; }
        public int PageIndex { get; set; }
        public int PageSize { get; set; }
        public RulesException Exception { get; set; }
    }
    

    问题是,当我创建Web引用时,它将我的服务接受/返回的类型转换为代理对象。

    当我使用服务引用(与Web引用相反)时,它似乎工作得更好,但随后暴露了服务引用,这不太理想。

    我正在寻找任何可以减少代码重复的想法。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Aliostad    14 年前

    不使用!使用wcf通过创建和缓存channelfactory连接到Web服务,然后每次创建代理。WCF是访问Web服务的理想选择。这样你就不需要任何参考资料了。