3

WindowsサービスにWCFサービスが組み込まれています。localhostにバインドされますが、この種類のURL( "http:// ip:port / ServiceName")からの接続も受け入れます。他のURLから非表示にして、localhostからの接続のみを許可するにはどうすればよいですか。

これが私のサービス構成です

<system.serviceModel>
 <behaviors>
  <serviceBehaviors>
     <behavior name="Test.Service.ServiceBehavior">
         <serviceMetadata httpGetEnabled="true" /> 
         <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior>
  </serviceBehaviors>
 </behaviors>
 <services>
   <service behaviorConfiguration="Test.Service.ServiceBehavior" name="Test.Service.TestService">
      <endpoint address="localhost" binding="wsHttpBinding" contract="Test.Service.IService">
        <identity>
           <dns value="localhost" /> 
        </identity>
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
      <host>
         <baseAddresses>
              <add baseAddress="http://localhost:8732/MyService/service" /> 
         </baseAddresses>
      </host>
  </service>
</services>
</system.serviceModel>
4

3 に答える 3

6

それを「隠す」には、メタデータ交換をオフにする必要があるため、以下を削除する必要があります。

<serviceMetadata httpGetEnabled="true" /> 

サービスの動作から、mexエンドポイントを削除する必要があります。

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

ただし、これはそれを「覆い隠す」だけです。localhost以外の誰かが呼び出すのを避けるために、netNamedPipeBinding「このマシンでのみ」設計されているに切り替えてみませんか。外部の呼び出し元はそのエンドポイントに呼び出すことができません。

それ以外の場合は、発信者のIPアドレスを確認し、その情報に基づいてブロックする必要がありますが、これは非常に簡単になりすますことができます。

于 2010-11-24T11:02:51.757 に答える
1

私はに切り替えNetNamedPipeBindingます-これは本質的にローカルのみですが、いくつかの追加のレイヤーを回避し、ポートへのアクセスを必要としません(非管理者はデフォルトで持っていません)。<netNamedPipeBinding>これは、要素を使用してconfigで実行できます。

于 2010-11-24T11:02:17.403 に答える
0

IISでホストしている場合は、サイトのバインドを「*」から「127.0.0.1」に変更するだけです。

于 2010-11-24T11:07:24.550 に答える