【发布时间】:2010-10-14 02:52:59
【问题描述】:
我有一个 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 引用)时,它似乎工作得更好,但服务引用被暴露了,这不太理想。
我正在寻找可以减少代码重复的任何想法。
【问题讨论】:
标签: .net architecture webservice-client