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