2012-02-20 4 views
2

WCFに実際のオブジェクトへのプロキシのリストまたはIEnumerableを生成させるにはどうすればよいですか?私は自己ホストアプリケーションでこれをやっています。WCFにプロキシのリストを生成させるにはどうすればよいですか?

は、ここで私が持っているものです。

public interface IRemoteControlGroup { 
    List<IRemoteControl> GetInstances(); 
} 

public class RemoteControlGroupImpl : IRemoteControlGroup { 
    public List<IRemoteControl> GetInstances() 
    { 
     System.Console.Error.WriteLine("Called GetInstances()"); 
     List<IRemoteControl> list = new List<IRemoteControl>(); 
     // implementation detail: get this list of IRemoteControl objects 
     return list; 
    } 
} 

public interface IRemoteControl { 
    void Stop(); 
    void Start(); 
    void GetPID(); 
} 

public class RemoteControlImpl : IRemoteControl { 
    // actual implementation 
} 

私はWCFにしたい:

  • オファーIRemoteControlGroupに契約によって定義されたサービス、RemoteControlGroupImpl、。
  • IRemoteControlGroup.GetInstances()が呼び出されたとき(クライアント上)、リストの要素が(ホストの実際のIRemoteControlオブジェクトを呼び出すことによって)IRemoteControlを実装するプロキシである場合、私にList<IRemoteControl>を渡してください。

私はWCFが実際にRemoteControlImplオブジェクトをワイヤでプッシュしないようにしたいと思います。私はちょうどIRemoteControlを実装するプロキシをプッシュしたい。 RemoteControlImplオブジェクトには実際にローカルシステムへのハンドルが含まれています(アプリケーションはGUIインターフェイスのみを公開しているため、ウィンドウハンドルです)。したがって、シリアル化できません。 GetInstance()によって返される要素の数はさまざまです。

私が見つけたのはthis articleでした。やや。しかし、コードでこれを行う方法を教えてくれません。ちょうど構成で。それはまた、私が何を望んでいるのかもよく説明していない。サービスのエントリポイントはプロキシを配信します。私は私のサービスがプロキシのリストを提供するためのエントリーポイントを望んでいます。

+0

WSHttpBinding/NetTcpBindingとセッションの警告があります。私はこのすべてのWCF技術には新しいです。 – user314104

+1

新しい人なら、あなたが見た例から遠く離れてはいけません。 WCFは.NET Remotingではありません。 –

+0

ありがとうございます。残念なことに、私たちの技術を将来的に管理するという管理上の要求があるため、.NET RemotingまたはCORBAを使用して喜んでいますが、私はWCFのほかに何も示唆していません。 – user314104

答えて

0

@John Saundersは、あなたのアプローチを再考する必要があると指摘しています。私はあなたの '複数の'インスタンスを駆動しているかどうかによって役に立つかもしれない2つの一般的なアプローチについて考えることができます。

1)アプリケーションの外部から駆動された場合(つまり、使用可能なIRemoteControlターゲットのリストが実行時に動的に変更されない場合)、複数のエンドポイントを介して同じ契約を公開する可能性があります。例えば。 http://localhost/remotecontrol.svc/instance1http://localhost/remotecontrol.svc/instance2などです。異なるエンドポイントの可用性は、WSDLを介して公開できます。

2)複数のターゲットが動的である場合、最も簡単な方法は、あなたの契約を再定義することです:

public interface IRemoteControlGroup { 
    List<string> GetInstances(); 
    void Stop(string instanceId); 
    void Start(string instanceId); 
    void GetPID(string instanceId); 
} 

内部的には、あなたのサービスがのInstanceIdと単にルートで入ってくるのキー、利用可能IRemoteControlオブジェクトの辞書を維持するであろうターゲットインスタンスへの操作。

+0

こんにちは、応答ありがとう。 「私のアプローチを再考する必要がある」という根本的な理由は何ですか? WCFは単にパラダイムをサポートしていないのでしょうか、あるいは設計上の理由がありますか? – user314104

+0

@ジョン・サンダースはすでにそれを明確に説明しています。私はその印象の下にいた( 'ああ。当時の課題を達成するための推奨事項はありますか?」)では、WCFを使用した実行可能なアプローチの提案に移った。 –

+0

私はすぐにそれを読んではいけません。私を啓発してもらえますか?私がその説明のために見る最も近いことは、「.NET Remotingでは意味をなさないが、WCFでは意味をなさない」ということです。これは、この使用モデルがWCFの合理的な省略であることを意味していますか(「あなたはWCFでそれを行うことはできません」)、それはその機能が存在することを暗示しますが、なぜなら... ...)? – user314104

関連する問題