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

时间:2010-10-13 18:39:40

标签: .net architecture webservice-client

我有一个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; }
    }

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

[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 个答案:

答案 0 :(得分:1)

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