Как настроить несколько WCF обязательные конфигурации для единственной схемы

У меня есть ряд IIS7-размещенного net.tcp WCF сервисы, которые обслуживают мое веб-приложение MVC ASP.NET. К веб-приложению получают доступ по Интернету.

WCF Services (IIS7) <--> ASP.NET MVC Application <--> Client Browser

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

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

Это не точка здесь все же. Используя несколько TCP привязка - то, что дает мне проблему. Я пытался настроить его как это в моей клиентской конфигурации:

<bindings>
  <netTcpBinding>
    <binding>
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName"/>
      </security>
    </binding>
    <binding name="public">
      <security mode="Transport">
        <message clientCredentialType="Windows"/>
      </security>
    </binding>
  </netTcpBinding>
</bindings>

<client>
  <endpoint contract="Server.IService1" binding="netTcpBinding" address="net.tcp://localhost:8081/Service1.svc"/>
  <endpoint contract="Server.IService2" binding="netTcpBinding" bindingConfiguration="public" address="net.tcp://localhost:8081/Service2.svc"/>
</client>

Конфигурация сервера - это:

<bindings>
  <netTcpBinding>
    <binding portSharingEnabled="true">
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName"/>
      </security>
    </binding>
    <binding name="public">
      <security mode="Transport">
        <message clientCredentialType="Windows"/>
      </security>
    </binding>
  </netTcpBinding>
</bindings>

<services>
  <service name="Service1">
    <endpoint contract="Server.IService1, Library" binding="netTcpBinding" address=""/>
  </service>
  <service name="Service2">
    <endpoint contract="Server.IService2, Library" binding="netTcpBinding" bindingConfiguration="public" address=""/>
  </service>
</services>

<serviceHostingEnvironment>
  <serviceActivations>
    <add relativeAddress="Service1.svc" service="Server.Service1"/>
    <add relativeAddress="Service2.svc" service="Server.Service2"/>
  </serviceActivations>
</serviceHostingEnvironment>

Вещь состоит в том, что обе привязки, кажется, не хочет, сосуществуют в моем хосте. Когда я удаляю любого из них, все в порядке, но вместе они производят следующее исключение на клиенте:

Требуемое обновление не поддерживается 'сетью tcp://localhost:8081/Service2.svc'. Это могло произойти из-за несогласованной привязки (например, безопасность включила на клиенте а не на сервере).

В журнале трассировки сервера я нахожу следующее исключение:

Заявление Типа протокола было послано в сервис, который не поддерживает тот тип обновления.

Я изучаю правильное направление или являюсь там лучшим способом решить это?

ОБНОВЛЕНИЕ

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

5
задан Sandor Drieënhuizen 12 August 2010 в 09:21
поделиться

1 ответ

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

0
ответ дан 15 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: