Использование уникального идентификатора Windows в среде службы WCF - PullRequest
0 голосов
/ 05 мая 2011

У меня есть приложение Silverlight, которое использует WCF. Я хочу иметь уникальную информацию, основанную на пользователе Windows, который использует приложение; я хочу показать только данные для этого пользователя. Сайт будет размещен на IIS. Я сталкиваюсь с различными проблемами с этим ...

Первоначально я использовал HttpContext.Current, но он начал возвращаться как нулевой, когда я размещал его в IIS (несмотря на использование проверки подлинности Windows).

У меня есть web.config:

<system.web>
    <authentication mode="Windows"/>
  <system.web>

Единственное, что меня интересует, это детали конфигурации клиента Silverlight. Привязки для этого имеют <security mode="None"/>, но всякий раз, когда я пытаюсь изменить их, я получаю сообщение об ошибке.

В настоящее время я использую basicHttpBinding.

Я также установил aspNetCompatibility для своего сервиса, поэтому он должен обрабатывать HttpContext.

Вот мой файл ServiceReferences.ClientConfig:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="winAuthBinding" maxBufferSize="2147483647"
            maxReceivedMessageSize="2147483647">
          <security mode="TransportWithMessageCredential">
            <transport clientCredentialType="Windows" proxyCredentialType="Windows"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>

    <client>
      <endpoint address="../service.svc"
          binding="basicHttpBinding" bindingConfiguration="winAuthBinding"
          contract="Contract1" name="name1" />
      <endpoint address="../service.svc"
          binding="basicHttpBinding" bindingConfiguration="winAuthBinding"
          contract="Contract2" name="name2" />
      <endpoint address="../service.svc"
          binding="basicHttpBinding" bindingConfiguration="winAuthBinding"
          contract="Contract3" name="name3" />
    </client>
  </system.serviceModel>

И web.config; Я вставлю только раздел system.serviceModel:

<system.serviceModel>

    <behaviors>
      <serviceBehaviors>
        <behavior name="serviceBehaviour">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true"  />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

    <bindings>
      <basicHttpBinding>
        <binding name="winAuthBinding">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>

    <services>
      <service behaviorConfiguration="serviceBehaviour" name="name1">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="winAuthBinding"
                  contract="Contract1"/>
      </service>
      <service behaviorConfiguration="serviceBehaviour" name="name2">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="winAuthBinding"
                  contract="Contract2"/>
      </service>
      <service behaviorConfiguration="serviceBehaviour" name="name3">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="winAuthBinding"
                  contract="Contract3"/>
      </service>
    </services>

    <client/>
  </system.serviceModel>

Ответы [ 2 ]

0 голосов
/ 14 мая 2011

Не уверен, что это то, что вам нужно, но вы пробовали

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]

Украшение для вашего класса обслуживания?

0 голосов
/ 05 мая 2011

Вы настроили элемент <basicHttpBinding> для размещенной службы IIS, он должен выглядеть следующим образом:

<security mode="TransportCredentialOnly">
  <transport clientCredentialType="Windows" />
</security>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...