通过WCF服务传递和检索具有方法的类

时间:2012-10-29 11:14:41

标签: .net wcf c#-4.0

我想通过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是一个好习惯吗? 提前谢谢!

2 个答案:

答案 0 :(得分:2)

WCF交换XML(或JSON)文档。标有“DataMember”的方法值将在文档中。方法中的代码没有被序列化。

答案 1 :(得分:0)

这些方法不会被WCF传递,但是方法在编译时是固定的,所以想要在运行时传递它们有点奇怪。

如果您希望客户端对象具有与服务器对象相同的方法,最简单的方法是将您的数据合同放入他们自己的项目中 然后将生成的DLL提供给您的客户端。

然后,当客户端从WSDL生成WCF代理时,他们选择重用已知类而不是生成新类。为此,在添加服务引用时,单击“高级”,然后查看“在引用的程序集中重用类型”选项。

enter image description here