1

2つの異なるエンドポイントで公開されている2つのコントラクトContract1とContract2を持つwcfサービスを開発しました。クライアントアプリケーションへの参照を追加しようとすると、両方のコントラクトを使用できるようになります。

クライアントアプリケーションが1つのコントラクトのみを消費するように制限するにはどうすればよいですか?

これが私のweb.configのコードです

<system.serviceModel>
    <services>
        <service behaviorConfiguration="MyWCFService.Service1Behavior"
         name="MyWCFService.Service1">
            <host>
                <baseAddresses>
                    <add baseAddress="http://localhost:1010/Service1.svc"/>
                </baseAddresses>
            </host>

            <endpoint address="/MyService1" binding="wsHttpBinding" contract="MyWCFService.IService1" />                
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <endpoint address="/MyService2" binding="wsHttpBinding" contract="MyWCFService.IService2" />

        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="MyWCFService.Service1Behavior">
                <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                <serviceMetadata httpGetEnabled="true"/>
                <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

前もって感謝します。

4

4 に答える 4

2

2つのコントラクトを持つ単一のWebサービスエンドポイントを、異なるアドレスの2つのWebサービスエンドポイントとそれぞれに1つのコントラクトに分割し、クライアントアプリケーションで1つだけを使用してみませんか。

設計で1つのエンドポイントに2つのコントラクトが必要であり、クライアントが1つのコントラクトしか使用できない理由は不明です。

または、セキュリティを追加します。たとえば、アクセスを制限したいコントラクトのメソッドシグネチャにパスワードフィールドを追加するなど、かなり基本的なものを追加します。

于 2011-01-21T08:52:45.237 に答える
1

私は2つの方法を考えることができます-

  1. 最初の方法は、ファイアウォールを使用して2番目のサービスURLをブロックすることです。別のベースアドレス(おそらくポートまたはホストヘッダー)を選択すると便利です。さらに別のバリエーションは、別のアプリケーション/ Webサイトで2番目のWebサービスをホストし、外部アクセスからブロックすることです。サービスを分離することは、メタデータ(mex)エンドポイントを分離することからも意味があります-現在の共有エンドポイントは両方のサービスのWSDLを公開するため-必要がない場合は、2番目のWebサービス(パブリックエンドポイント上)のメタデータを公開することは意味がありません他の人が消費するために。

  2. 2番目の方法は、Webサービスのセキュリティに依存します。基本的に、外部の関係者に公開されていない資格情報を使用して2番目のWebサービスを作成します。

于 2011-01-21T08:33:54.103 に答える
0

IISは、IPに基づく限定的なフィルタリングサービスを提供します。

Windowsネットワークは、IPに基づく限定的なフィルタリングサービスを提供します。

ファイアウォールは、必要なフィルタリングを提供します。

于 2011-01-21T08:37:20.373 に答える
0

私は以下の解決策を実行しました。

  1. サービスコントラクト用に2つのインターフェイスを作成します。IService1とIService2としましょう。

  2. これらの2つのインターフェースをサービスクラスに実装します。service1という名前を付けましょう

  3. Service1から派生サービスクラスを作成します。単なる空白の派生クラス。

  4. app.configに2つの異なるサービス要素を作成します

  5. 1番目のサービスでは、アドレスとバインディングを使用してエンドポイントを作成し、IService1をコントラクトとして提供します。独自のベースアドレスがあります

  6. 2番目のサービスでは、いくつかの異なるアドレスとバインディングを使用してエンドポイントを作成し、IService2をコントラクトとして提供します。独自のベースアドレスがありますが、これは異なります。

次に、選択に応じて、任意のアドレスをクライアントに共有します。

于 2017-01-25T23:16:22.323 に答える