0

状況:

複数のプロジェクトのソリューションがあります。

  • 実行可能アプリ #1
  • 実行可能アプリ #2
  • WCF プロジェクト
  • 共有プロジェクト
  • 「その他」プロジェクト
  • ...

ここで、実行可能アプリ #1 で WCF サービスを使用する必要があります。UserServiceたとえば、WCF プロジェクトのからユーザーに関する情報を取得します。両方の実行可能ファイルには によって処理されるログインが必要なため、共有プロジェクトUserServiceに「認証」メソッドを追加しました。この認証も によって処理されます。UserService

問題:

ここで、各プロジェクト内にサービス参照を追加する必要がありますが、これは実際には問題ではありません。しかし、今では 3 つのプロジェクトすべてでプロキシ クラスとエンドポイントが生成されます。

3 つのサービス参照をすべて更新する必要があるため、これは問題だと思います。

  • 実行可能アプリ #1 はエンドポイントのみを必要とします (共有プロジェクトのプロキシ クラスを使用できます)
  • 実行可能アプリ #2 はエンドポイントのみを必要とします (上記と同じ)
  • 共有プロジェクトにはプロキシ クラスのみが必要です

質問:

共有プロジェクトでエンドポイント構成を作成せず、実行可能アプリでプロキシ クラスを作成せずに、サービス参照を追加するための優れたソリューションはありますか?

4

1 に答える 1

0

さて、私は最近これに似たものを実装しました。これが私がしたことです。これにより、問題が適切に分離され、すべての実行可能ファイルでプロキシ クラスを生成する必要がなくなると思います。

  • ServiceContract プロジェクトを作成します。これには、WCF サービスのコントラクトを定義するインターフェイスが含まれます。
  • ClientProxy プロジェクトを作成し、ClientProxy クラスを含めます。このプロジェクトは ServiceContact を参照し、WCF サービスのバインドを設定します。コンストラクターで、WCF サービスの URI をこのクラスに渡すことをお勧めします。

プロキシ クラスは次のようになります。

public class ClientProxy 
{
    public IMyWCFService service;

    public ClientProxy(string uri)
    {
        // Any channel setup code goes here
        EndpointAddress address = new EndpointAddress(uri);
        NetTcpBinding binding = new NetTcpBinding(SecurityMode.Transport);
        binding.TransferMode = TransferMode.Streamed;
        binding.MaxBufferSize = //whatever
        binding.MaxReceivedMessageSize = //whatever
        ...

        ChannelFactory<IMyWCFService> factory = new ChannelFactory<IMyWCFService>(binding, address);
        service = factory.CreateChannel();
    }
}

これで、WCF サービス プロジェクトに ServiceContract への参照が含まれるようになり、ここでインターフェイスを実装します。

実行可能ファイルには、ServiceContract および ClientProxy プロジェクトへの参照が含まれます。

これがお役に立てば幸いです。何か説明が必要な場合はお知らせください。

于 2014-02-12T21:33:53.437 に答える