如果您有一个在客户端中引用的实体和这样的网络服务
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();
}
