2016-09-23 6 views
1

私はこのようなサービスクラス階層を持っている:基本サービスメソッドへの参照を作成するには?

ベースのサービス:

[ServiceContract()] 
public interface IServiceBase 
{ 
    [OperationContract] 
    void BaseMethod(); 
} 

public class ServiceBase : IServiceBase 
{ 
    public void BaseMethod() 
    {} 
} 

サービスA:

[ServiceContract()] 
public interface IServiceA : IServiceBase 
{} 

public class ServiceA : ServiceBase, IServiceA 
{} 

サービスB:私は作成し、クライアント側で

[ServiceContract()] 
public interface IServiceB : IServiceBase 
{} 

public class ServiceB : ServiceBase, IServiceB 
{} 

ServiceAとServiceBの2つのプロキシクラスをVisual Studioの「A DDサービス参照」ツール:(サーバ側の基底クラスであるが)は、2つの異なるサービスに

ProxyA proxyServiceA; 
ProxyB proxyServiceB; 

これらは参照。

私はBaseServiceからこれらのプロキシを介して同じ方法でメソッドを呼び出す必要があります。例えば、私はメソッドのパラメータとしてこれらのプロキシを通過させ、そのBaseServiceメソッドを呼び出し、このようにしたい:

// somewhere on the client side 
WorkMethod(proxyServiceA); 
WorkMethod(proxyServiceB); 

// Something like this, BUT I DON'T REALLY KNOW WHAT TYPE OF PARAMETER TO USE 
void WorkMethod(ProxyBase proxyBase) 
{ 
    proxyBase.BaseMethod(); 
} 

しかし、それを行う方法、(これらのプロキシは、異なるクラスであることを覚えてどのようなタイプのパラメータの使用BaseService共通祖先なし)?

つまり、サーバー側ではServiceAとServiceBに共通の祖先があり、基本メソッドを呼び出すことは可能ですが、クライアント側で行う方法はありますか?

これらの2つのプロキシの基本クラスとして認識されているクライアント上のクラスを取得することはできますか?(もちろんSystem.ServiceModel.ClientBaseを除く)

+0

未処理の例外をして取得します/ questions/3422567/wcf-service-inheritance) - 基本サービスを実装する基本プロキシを作成する。 – Alex34758

答えて

0

ServiceKnownTypeAttributeクラスを使用する必要があります。 KnownType属性を使用すると、データコントラクトの受け入れ可能なサブクラス(ベースサービス)を指定できます。このサンプルは、その使用方法を示しています。 Whithout KnowTypeあなたは常に問題は、[このケース](http://stackoverflow.comとほぼ同じである

て、CommunicationExceptionのよう

[DataContract] 
[KnownType(typeof(Student))] 
[KnownType(typeof(Teacher))] 
public abstract class BaseService 
    { 
     [DataMember] 
     public int Code { get; set; } 

     [DataMember] 
     public string Name { get; set; } 
    } 
[DataContract] 
public class Student : BaseService 
    { 
     [DataMember] 
     public int StudentId { get; set; } 
    } 
[DataContract] 
public class Teacher : BaseService 
    { 
     [DataMember] 
     public int TeacherId { get; set; } 
    } 

Here is MSDN doc

+0

私はコードサンプルで私の質問にもっと明確にしました。私は、既知の型はキーではなく、キーの一部ではないと思います。 WorkMethodを呼び出す必要があるコードの部分を理解できません - どのようにこれらのプロキシ(proxyServiceAまたはproxyServiceB)をWorkMethodメソッドに渡してBaseMethodを呼び出すことができますか?知られているタイプは十分ではないと私は思います。 – Alex34758

+0

既知のタイプの概念は、データコントラクトに関連しています。私の質問にはデータ契約はありません。私の質問は、基本インターフェイスの基本実装を共有し、この基本機能をクライアントで使用しようとすることです。申し訳ありませんが、あなたの答えは相対的ではないと思います。 – Alex34758

関連する問題