Skip to main content
 首页 » 编程设计

c#之如何通过 .Net Web 服务使用相同的域实体

2024年02月03日26me-sa

如果您有一个在客户端中引用的实体和这样的网络服务

public class Post 
{     
        public int ID {get; set;} 
        string Data {get; set;} 
} 
 
 
 
 public class MyService: System.Web.Services.WebService 
 {    
         [WebMethod] 
         public int Write (Post post) 
         {  
               //Do stuff 
 
         } 
 } 

在客户端为了使用你从代理类实例化的实体

   public void ClientMethod() 
      { 
         var post = new proxyclass.Post(); 
         //fill post 
         new ProxyClass.Myservice().Write(post)  
 
       } 

我如何使用我的域实体来调用网络服务?

 public void ClientMethod() 
          { 
             var post = new Post(); 
             //fill post 
             new ProxyClass.Myservice().Write(post)  
 
           } 

请您参考如下方法:

基本上,您不能 - 对于常规网络服务,至少...代理类是完全独立的。但是,上面的对于 WCF 是可能的,您实际上根本不需要代理类(但是,为了 SOA 纯度,使用它们是个好主意)。

您可以使用反射(等)在您的域实体和代理之间复制属性,但是很难做到 100% 正确(尽管 xml 序列化应该工作 [理论上]作为一种中间语言)。


所以;如果你想使用程序集共享;考虑使用支持此功能的 WCF ;-p

要在不使用代理层的情况下获取服务,您可以使用以下技巧:

public class WcfClient<T> : ClientBase<T> where T : class 
{ 
    public T Service { get { return base.Channel; } } 
} 

(这将从 app.config 访问默认配置;为了获得更多控制,您需要添加一些与基本构造函数重载匹配的构造函数重载)

然后:

interface IFoo {void Bar();} 
... 
using(WcfClient<IFoo> client = new WcfClient<IFoo>()) { 
    client.Service.Bar(); 
}