我正在寻找一种方法让生成的Web引用代理类(而不是WCF)实现一个通用接口,以便在客户端应用程序中轻松切换Web服务访问和“直接”访问我们的业务层,如:
public IBusiness GetBusinessObject() { if (_mode = "remote") return new BusinessWebService.Business(); // access through web service proxy class else return new Business(); // direct access }
但是,生成的代理类中未引用自定义类型(例如,下面示例中的CustomSerializableType).而是生成新的相同类型,这使得代理类无法实现接口.
是否有某种方法可以使生成的代理类引用这些类型,或者我是否会将此全部错误?我应该考虑将Web服务转换为WCF服务吗?
细节
>业务库(包含业务逻辑,访问数据存储)
>公共库(包含常用功能,包括CustomSerializableType)
> Web服务(充当远程客户端和业务层之间的代理)
>一个Windows应用程序
我们的客户希望Windows应用程序能够以两种不同的模式运行:
>本地模式,应用程序只是直接使用业务库来访问数据
>远程模式,应用程序与Web服务通信以访问数据
为此,我们创建了一个IBusiness接口,它位于公共库中,包含所有业务方法.
接口
public interface IBusiness { CustomSerializableType DoSomeWork(); }
业务层
public class Business : IBusiness { public CustomSerializableType DoSomeWork() { // access data store } }
网络服务
public class WebServiceBusiness : IBusiness { private Business _business = new Business(); [WebMethod] public CustomSerializableType DoSomeWork() { return _business.DoSomeWork(); } }
public partial class Business : System.Web.Services.Protocols.SoapHttpClientProtocol { public CustomSerializableType DoSomeWork() { // ... } public partial class CustomSerializableType { // PROBLEM: this new type is referenced,instead of the // type in the common library } }