10

壮大なデザインは次のとおりです。

  1. Windowsサービスとしてインストールされる特定のアプリケーションがあります
  2. ネットワーク上にこれらのいくつかがあるかもしれません
  3. それらのそれぞれは、ネットワークへのいくつかのインターフェースを公開します(「リモート制御」または「構成」と考えてください-そのようなもの)
  4. 次に、そのインターフェイスのクライアントとして機能する別のアプリケーションがあります(同じアナロジーを使用-「リモートコントローラー」または「構成ツール」)
  5. 後者の目的は、ネットワーク上の前者のすべてのインスタンスをスニッフィングし、それらをリストとしてユーザーに表示し、ユーザーがその公開されたインターフェイス(つまり、「リモートコントロール」または「構成」)を使用してさまざまな場所でそれらを突くことができるようにすることです。彼ら)
  6. 簡単にするために、全員が同じネットワーク内にいると仮定します。つまり、全員が互いのUDPブロードキャストを聞くことができます。

かなり簡単ですよね?私は昔、ロールマイオウンのUDPブロードキャストベースの検出メカニズムを使用して、この種のものを数十個作成していました。

しかし今、私はクールでヒップになり、アドホックモードでグルーヴィーなWCFディスカバリーを使用すると思いました。そしてそれは動作します!誰が言うことができますか?:-)

しかし、完全ではありません。私の前であちこちで述べたよう、ディスカバリーはサービスの構成からハードコードされたURLを返します。つまり、サービス<baseAddresses><add baseAddress="net.tcp://localhost:1234/My/Service" /></baseAddresses>の構成ファイルにある場合、それはまさに私がディスカバリークライアントから取得しようとしているものです-「localhost」の部分を含みます。

言うまでもなく、そのURLを使用してサービスを呼び出そうとすると、スリル満点の結果にはなりません。

だから問題は、ディスカバリークライアントにローカルホストのようなゴミの代わりに使用可能なURLを与えるにはどうすればよいですか?

みんなの時間を節約するために、うまくいかないいくつかの考え:

  1. 展開時にサービスの構成ファイルを変更し、実際のIPアドレスまたはマシン名をエンコードします。
    IPとマシン名の両方が変更される可能性があるため、機能しません。
  2. 現在のIPまたはマシン名を使用してURLを作成し、コードから(少なくとも部分的に)サービスを構成します。
    動作しません。ネットワークにDNSがない可能性があるため、マシン名は役に立ちません。コンピュータが一度に複数のネットワーク上にあり、したがって複数のIPアドレスを持っている可能性があるため、IPは役に立ちません(これは架空のものではなく、実際にこの状況にあります)どちらを使用しますか?

つまり、サービスを微調整する必要はなく、検出クライアントに検出応答の送信元のアドレスを提供させる必要があります。

4

3 に答える 3

13

localhostワイルドカードに置き換えることで、これを修正できるはずです。

<baseAddresses><add baseAddress="net.tcp://*:1234/My/Service" /></baseAddresses>
于 2011-01-21T03:39:00.250 に答える
3

構成を使用しないでください。

プログラムでサービスを実行します。

プログラムでエンドポイントを追加する例を次に示します。Programmatic_Endpoint_Configuration

そしてこれは、比較のために:Self-hosting_and_base_addresses

于 2011-01-20T23:20:27.753 に答える
0

ワイルドカード以外の別のオプションは、ローカルホストのマシンのDNS解決可能なホスト名instadを使用することです。

于 2011-03-04T11:43:58.967 に答える