3

我想通过 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!!!");

在传输数据合约的同时,其中的方法也会被传输吗?我的业务对象也包含方法,它们需要通过 WCF 传递。有办法吗?通过 WCF 传递这样的 BO 是一种好习惯吗?提前致谢!

4

2 回答 2

2

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

于 2012-10-29T12:14:33.197 回答
0

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

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

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

在此处输入图像描述

于 2012-10-29T12:29:03.710 回答