我正在寻找一种方法让生成的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 } }
解决方法
原文地址:https://www.jb51.cc/csharp/100039.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。