Как настроить WCF без защиты и с минимальными привязками - PullRequest
0 голосов
/ 02 ноября 2009

У меня были серьезные проблемы с WCF, , которые не поддаются никакой мудрости, которую я могу найти . Я пробовал basicHttpBinding, wsHttpBinding, netTcpBinding (со службой Net.Tcp, работающей на обеих машинах). Поведение можно свести к:

  • работает на той же машине, когда работает в отладчике, автономный (не сервисный) процесс, служба Windows
  • не может быть доступен с другой машины, если я не запускаю службу в отладчике

Я должен признаться, что был сбит с толку из-за множества вариантов привязок / безопасности / и т.д. Я также должен признаться, что не знал об ограничениях на запуск в качестве службы Windows, хотя я уверен, что где-то читал, что учетная запись SYSTEM не имеет сетевых учетных данных. Я попытался запустить службу под своими собственными учетными данными, с теми же результатами.

Я столкнусь с крайним сроком в несколько часов, и в данный момент мне придется прибегнуть к запуску в качестве отдельного процесса, что довольно смущает.

Я уверен, что совершил простую, но важную ошибку в моем понимании, и был бы счастлив получить просветление. Но сейчас я был бы рад, если бы кто-нибудь знал быстрый и грязный способ запуска WCF между двумя компьютерами в одной сети Windows без необходимости обеспечения безопасности, где один - это служба Windows, а другой - приложение с графическим интерфейсом Windows.

Ответы [ 3 ]

1 голос
/ 03 ноября 2009

Это проблема брандмауэра Windows? По умолчанию для BasicHttpBinding установлен режим безопасности «none», а установить его на netTcp для клиента и службы так же просто, как поместить элемент security mode = «none» под корневым элементом привязки в конфигурации клиента и сервера. Похоже, что брандмауэр на сервере был бы единственным, что помешало бы вам подключиться, если режим безопасности не установлен.

1 голос
/ 03 ноября 2009

1) Помимо открытия брандмауэра, вам почти наверняка необходимо явно разрешить привязку обслуживающего порта через API-интерфейсы HTTP.SYS. Это можно сделать с помощью встроенной команды netsh http add в Vista или более поздней версии, с помощью загружаемого инструмента httpcfg в более ранних системах или путем прямого P / Invoking для API-интерфейсов HTTP с административными привилегиями в качестве шага настройки.

2) если у вас несколько служб, заставить их разделить адресное пространство на заданном порту гораздо проще, если они используют HTTP, чем net.tcp

3) по умолчанию служба, которая общается по сети, должна запускаться с идентификатором сетевой службы, в идеале как SID, специфичный для службы: даже если данные не являются конфиденциальными, это предоставляет пользователю с высокими привилегиями, например, System в сети. не очень хорошая практика.

1 голос
/ 02 ноября 2009

Это требует привязки NetNamedPipe (связь внутри машины)!

Ваша конфигурация должна выглядеть примерно так:

  <system.serviceModel>
    <bindings>
      <netNamedPipeBinding>
        <binding name="NoSecurityIPC">
          <security mode="None" />
        </binding>
      </netNamedPipeBinding>
    </bindings>
    <client>
      <endpoint name="internal"
                address="channel1"
                binding="netNamedPipeBinding"
                bindingConfiguration="NoSecurityIPC"
                contract="IYourService" />
    </client>
    <services>
      <service name="Namespace.YourService">
        <host>
          <baseAddresses>
            <add baseAddress="net.pipe://localhost/" />
          </baseAddresses>
        </host>
        <endpoint
            address="channel1"
            binding="netNamedPipeBinding" 
            bindingConfiguration="NoSecurityIPC"
            contract="IYourService" />
      </service>
    </services>
  </system.serviceModel>

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...