2012-01-23 14 views
0

私はそのインターフェイスを使用して複数のクラスを持ち、サーバでもにいくつかのパラメータに基づいて特定のインスタンスを作成するファクトリがあります。複数のクラスをWCFに切り替える

これらのクラスをWCFクライアントに公開する必要があります。私は、インターフェイスをOperationContractとマークして通信を確立できると期待しましたが、サーバー上にあると思われます(私はWCF )クラスごとにサービスを作成する(または少なくともポートを開く)必要があり、インタフェース用にはできません。

これを行う唯一の方法ですか、何か不足していますか?

明示的に編集する:
私は1つのメソッドとのインターフェイスを持っているとします。Execute(EnumedParam action)としましょう。 私は

InterfaceType.Execute(Action.One); 

で、アクションに基づいてインスタンスを作成し、それを実行するサーバー上でクライアントからそれを呼び出すことができるようにしたいと思いExecute方法です。

また、クラスのインスタンスが多数存在する可能性があります。クライアントは、クラスだけでなくインターフェイスについても何も知らないようにしたいと考えています。

どのようにWCFでこれを行うことができますか?

(注:私のクラスのモデルは完全に間違っている場合は、私はこれについての詳細を読むことができる本やブログをお勧めすることができます?)

私は別の編集

のコメント内のコードを貼り付けることはできません

Wouter de Kortは私が何をしているかの素晴らしい例を示しました。しかし、エンドポイントをセットアップするにはどうしたらいいですか? はここhttp://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication与えられた例を見てみると - 著者はこのようなポートを開きます。私の問題がどこにある

using (ServiceHost host = new ServiceHost(
    typeof(StringReverser), 
    new Uri[]{ 
    new Uri("http://localhost:8000"), 
    new Uri("net.pipe://localhost") 
    })) 
{ 

は今それです。最初のパラメーターはクラスです(インターフェースクラスまたは抽象クラスであってはなりません)。インターフェイスを拡張するすべてのクラスでそれを行う必要がありますか、何とか複数のクラスに同じホストを使用できますか?

答えて

2

は、あなたが次のサービス・インターフェースを持っているとしましょう:

public interface IMyService 
{ 
    void Execute(EnumdParam action); 
} 

あなたはWCFでこれを使用したい場合は、あなたがそれを飾るされます:あなたのクライアントで

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    void Execute(EnumdParam action); 
} 

あなたがプロキシを作成する必要がありますWCFサービスにアクセスします。

[System.Diagnostics.DebuggerStepThroughAttribute()] 
public partial class MyServiceClient : ClientBase<IMyService>, IMyService 
{ 
    public MyServiceClient() 
    { 
    } 

    public void Execute(EnumdParam action); 
    { 
     return base.Channel.Execute(action); 
    } 
} 

あなたが見ることができるように、あなたのクライアントプロキシはIMyServiceはので、あなたのクライアントコードで、あなただけIMyServiceインタフェースを意識する必要が実装されています。 MyServiceの代わりにMyServiceClientを返すように工場を変更した場合は、クライアントコード内の何も変更する必要がありません(WCFの設定とクライアントの廃棄を除いて)。

+0

答えをありがとう、私はあなたの答えとして私のポストを更新しました。 – user1164630

+0

@ user1164630 WCFサービスのホストを設定することも別の問題です。あなたの例では、コンソールアプリケーションがWCFサービスをホストするために使用されています。IISを使用してweb.configファイルに設定することもできます –

関連する問題