2010-11-24 3 views
3

У меня есть служба WCF, встроенная в службу Windows. Он привязан к localhost, но также принимает соединение с такого рода URL - «http: // ip: port/ServiceName», как я могу скрыть его от других и разрешить соединение только с localhost.Как скрыть мою службу WCF

Вот моя конфигурация службы

<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> 

ответ

6

Чтобы «скрыть» это, вам нужно отключить любой мета обмена данными, так что вам нужно удалить:

<serviceMetadata httpGetEnabled="true" /> 

от вашего поведения услуг, и вы должны удалить MEX конечной точки:

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

Однако это только «затенение». Чтобы избежать вызова другого пользователя, кроме локального, почему бы не переключиться на netNamedPipeBinding, который по дизайну «только на этой машине» - никакие внешние абоненты не могут звонить в эту конечную точку.

В противном случае, вы должны проверить IP-адрес вызывающего абонента и блокировать их на основе этой информации - которая, однако, может быть подделана довольно легко ....

+0

благодарит за помощь) – mironych 2010-11-24 11:53:48

1

Я хотел бы перейти к NetNamedPipeBinding - это по своей сути локальной только, но и позволяет избежать некоторых дополнительных слоев, и не требует доступа к любым портам (которые непредставленных администраторы не имеют по умолчанию). Это можно сделать в конфигурации с помощью элемента <netNamedPipeBinding>.

0

При размещении в IIS, можно просто изменить сайт Связывание с "*" до "127.0.0.1"

Смежные вопросы