我想通过wcf服务传递/检索以下类的实例。该对象还应该携带由其类定义的方法。可能吗?假设以下类:
[DataContract]
public class MyClass
{
[DataMember]
public string Name;
public MyClass()
{
}
public MyClass(string name)
{
this.Name = name;
}
public void SetName(string name)
{
this.Name = name;
}
public string GetName()
{
return this.Name;
}
}
[ServiceContract]
public interface IMyService
{
[OperationContract]
MyClass GetMyClassInstance();
}
public class MyService:IMyService
{
public MyClass GetMyClassInstance()
{
return new MyClass("hello");
}
}
现在,当我在客户端应用程序项目中添加对MyService的引用时,将生成数据契约MyClass以及服务客户端,例如MyServiceClient,所以,我执行以下操作:
MyServiceClient client=new MyServiceClient();
MyClass myClass1= client.GetMyClassInstance();
但我真正的问题是,在从服务获得结果后,是否可以(?):
myClass1.SetName("oops!!!");
在传输数据合同时,它们中的方法是否也会被传输?我的Business对象也包含方法,它们需要通过WCF传递。有办法吗?通过WCF传递这样的BO是一个好习惯吗? 提前谢谢!
答案 0 :(得分:2)
WCF交换XML(或JSON)文档。标有“DataMember”的方法值将在文档中。方法中的代码没有被序列化。
答案 1 :(得分:0)
这些方法不会被WCF传递,但是方法在编译时是固定的,所以想要在运行时传递它们有点奇怪。
如果您希望客户端对象具有与服务器对象相同的方法,最简单的方法是将您的数据合同放入他们自己的项目中 然后将生成的DLL提供给您的客户端。
然后,当客户端从WSDL生成WCF代理时,他们选择重用已知类而不是生成新类。为此,在添加服务引用时,单击“高级”,然后查看“在引用的程序集中重用类型”选项。