c# – Web服务代理类实现接口
我正在寻找一种方法让生成的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服务吗? 细节 我们的解决方案包括以下四个项目: >业务库(包含业务逻辑,访问数据存储) 我们的客户希望Windows应用程序能够以两种不同的模式运行: >本地模式,应用程序只是直接使用业务库来访问数据 为此,我们创建了一个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 } } 解决方法
假设您的客户端的默认命名空间是“Client”,并且您的Web引用名为“Proxy”,则执行以下操作:
>在客户端项目的根目录中,创建名为“Proxy”的文件夹. 这样,您无需修改??Reference.cs.您永远不应该修改Reference.cs或通过代码生成生成的任何其他文件. 请注意,这会将客户端与服务紧密绑定,从而违反SOA的原则.至少,您应该在单独的项目中定义这些接口,以便您只共享客户端和服务之间的“接口”项目. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |