2

私はWCFの初心者です。クライアント側だけでなく、サービス側でも構成ファイルにエンドポイントを記述する必要があることはわかっています。次のような複数のエンドポイントがあるとします

<services>
      <service name="YourNamespace.YourService" behaviorConfiguration="Default">
        <endpoint name="Default" 
            address="http://YourServer/Services/MyService" 
            binding="basicHttpBinding" 
            contract="YourNamespace.IYourService"/>
        <endpoint name="TCP" 
            address="net.tcp://YourServer/ServicesTCP/MyService" 
            binding="netTcpBinding" 
            contract="YourNamespace.IYourService"/>

        <endpoint name="Dual" 
            address="http://YourServer/Services/MyService/Dual" 
            binding="wsDualHttpBinding" 
            clientBaseAddress="http://localhost:8001/client/"
            contract="YourNamespace.IYourDualService"/>

        <endpoint name="mex" 
            address=""
            binding="mexHttpBinding" 
            contract="IMetadataExchange"/>
      </service>
    </services>

次のようなエンドポイントアドレスを使用してクライアント側でプロキシを作成できないことはわかっています

http://YourServer/Services/MyService/Dual or
net.tcp://YourServer/ServicesTCP/MyService

むしろ、クライアント側でプロキシを作成する必要がある場合は、mex エンドポイント アドレスを提供する必要があります。だから私はエンドポイントアドレスの使用が何であるかを理解していませんか?

クライアント側でプロキシを作成してサービスを呼び出すと、プロキシがサービスに接続するためにどのエンドポイント アドレスを使用しているのかわかりません。

そのため、エンドポイント アドレスがどのように機能するのかを知りたいだけですか?

クライアントがサービスに接続し、tcp プロトコルが通信に使用されますが、他の http エンドポイントには 1 つの mex エンドポイントが使用されます。正常に動作します。

私の重要な質問は、basichttp、wshttp、wsdualbidning のような 3 つのエンドポイントがあると仮定すると、1 つの mex エンドポイントがそれらすべてに対して機能してプロキシを作成することを本当に知りたいということです。その場合、クライアントがサービスに接続すると、そのサービスに接続するためにどのエンドポイントアドレスが使用されるか教えてください。

誰かがこの問題について非常に詳細に、構成エントリの例とサービス コードの例を示して議論してくれれば、大きな助けになりますか?

更新された部分

Tom Redfern 氏は次のように述べています...内部使用の場合、サービス エンドポイントは必要ありません。コンソール アプリでホストされるサービスを開発し、他のクライアントがそのサービスに接続する必要があるとします。この場合、クライアントがプロキシクラスなしでサービスに接続し、さまざまなサービスメソッドを呼び出す方法を教えてください。プロキシなしで、wcf サービスのさまざまなメソッドに接続して呼び出す方法を知りたいだけです。プロキシなしで wcf サービスのさまざまなメソッドをプログラムで接続して呼び出す方法を示すためだけに、クライアント側のサンプル コードを添付してください。

4

1 に答える 1

0

エンドポイントには、それに対処する方法が必要です。これは基本的かつ合理的です。

クライアントが実際のサービス エンドポイントを解決するためにメタデータ エンドポイント アドレスのみを必要とするというあなたの主張は、メタデータ エンドポイントを公開している場合 (これは決して必要ではありません)、および消費者がサービスを消費する他の手段がない場合にのみ当てはまります (おそらくサービスはパブリックです)。

ほとんどのサービスは、(サービス プロキシ経由ではなく) 共有型アセンブリを参照してエンドポイントに直接バインドする機能が一般的である内部消費用に開発されています。これらのインスタンスでは、エンドポイント アドレスの知識が絶対に必要です。

UDDIの歴史について読むと、これは、サービスについて他に何も知る必要のないコンシューマーにサービス メタデータを配布する手段として設計されました。しかし、どのくらいの頻度で UDDI サーバーを目にしますか? ちょうど 1 つの会社で使用されているのを見てきました (合計で約 20 で働いています)。

于 2013-01-09T09:05:09.627 に答える