我有一个 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 引用)时,它似乎工作得更好,但服务引用被暴露了,这不太理想。
我正在寻找任何可以减少代码重复的想法。