2

我有一个 Web 服务和多个将使用它的客户端。一个 MVC 2.0 网站、一个 winforms 应用程序和潜在的移动应用程序。

我了解对于移动应用程序,每个应用程序都需要在内部访问和管理 Web 服务连接。但是对于 .net 应用程序我该怎么办?我对请求对象和返回类型使用复合类型。这是一个示例。

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

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

[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 引用)时,它似乎工作得更好,但服务引用被暴露了,这不太理想。

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

4

1 回答 1

1

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

于 2010-10-13T18:52:59.330 回答