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 への参照を追加すると、MyServiceClient などのサービス クライアントと共にデータ コントラクト MyClass が生成されます。次の手順を実行します。

MyServiceClient client=new MyServiceClient();
MyClass myClass1= client.GetMyClassInstance();

しかし、私の本当の質問は、サービスから結果を取得した後、これが可能かどうかです(?):

myClass1.SetName("oops!!!");

データ コントラクトを送信するときに、それらのメソッドも送信されますか? My Business オブジェクトにもメソッドが含まれており、WCF を介して渡す必要があります。方法はありますか?このような BO を WCF 経由で渡すことは良い方法ですか? 前もって感謝します!

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 に答える