2 つのコントラクトを実装するサービスを app.config に追加するのに問題があるため、2 つのエンドポイントが必要です。
私がやろうとしていることの基本的な例については、この質問を参照してください。
別々のエンドポイントに複数のコントラクトを実装するサービス クラスの WCF 構成
クライアントでサービス参照を使用してプロキシを作成および維持したいのですが、2 つのエンドポイントを持つサービスでこれを実行しようとすると、メタデータをダウンロードしようとすると詳細に次のエラーが表示されます。
メタデータに解決できない参照が含まれています
これは、wcf サービス ライブラリの app.config でサービスをセットアップする方法の例です。
<service name="MyService">
<endpoint address="Address1" binding="wsDualHttpBinding" bindingConfiguration=""
name="Service1" contract="IService1" />
<endpoint address="Address2" binding="wsDualHttpBinding" bindingConfiguration=""
name="Service2" contract="IService2" />
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
name="mex" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/MyService/" />
</baseAddresses>
</host>
</service>
シンプルなものが欠けているような気がします。エンドポイントの 1 つを削除すると、すべて正常に動作します。しかし、そこに両方のエンドポイントがあると、メタデータを解決できません。
ベースアドレスを削除して完全なアドレスを使用しようとしましたが、異なるポートを使用しましたが、試したすべてのパスで同じエラーが発生しました。
編集:そもそもなぜこれをやろうとしているのかを明確にする必要があります。クライアントが接続できるようにしたいシングルトン サービスがあります。ただし、クライアントにアクセスさせたくないメソッドがいくつかあります。管理メソッドとクライアント メソッドを 2 つの別個のコントラクトに分離することは、良い出発点になると思いました。
さらに明確にするために、これはゲームサーバーです。ゲーム サーバーの新しいインスタンスを開始して、マップなどを送信できるようにしたいと考えています。ゲーマーが LoadMap() などのメソッドにアクセスできるようにしたくありません。ゲーム クライアントが持つメソッドとコールバックと、マッチ メイキング サービスまたはサーバー管理者が持つメソッドとコールバックを分離したいと考えています。
また、読みやすく維持しやすくするために、それらを別個の契約にしたいと考えています。
ただし、それを行うためのより良い方法がある場合は、提案を受け付けています。