Олицетворение в автономном WCF? - PullRequest
0 голосов
/ 30 июня 2011

В настоящее время я разрабатываю службу WCF, самостоятельно размещенную в службе Windows, с помощью шаблона Self-Hosted SL Svc . Шаблон работает, как и должно быть, и я могу звонить из приложения Silverlight, но когда я пытался изменить проект для использования олицетворения:

[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public string GetData(int value)
{
    return string.Format("You entered: {0}", value);
}

Это вызывает у меня исключение во время host.Open();:

System.InvalidOperationException было необработанное сообщение = контракт Операция «GetData» требует Windows личность для автоматического подражания. Идентификатор Windows, который представляет вызывающий не предоставляется связыванием ( 'CustomBinding', 'http://tempuri.org/') для контракта ( 'IService1', 'http://tempuri.org/'.

Это моя конфигурация:

<system.serviceModel>
<bindings>
  <customBinding>
    <binding name="binaryHttpBinding">
      <binaryMessageEncoding/>
      <httpTransport/>
    </binding>
  </customBinding>
</bindings>
<services>
  <service name="SLServiceLibrary.Service1" behaviorConfiguration="SLServiceLibrary.ServiceBehavior">
    <endpoint address="Service1" binding="customBinding" contract="SLServiceLibrary.IService1" bindingConfiguration="binaryHttpBinding"/>
    <endpoint address="" binding="webHttpBinding" contract="SLServiceLibrary.IClientAccessPolicy" behaviorConfiguration="webHttpEnablingBehavior"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8733/"/>
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="SLServiceLibrary.ServiceBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="webHttpEnablingBehavior">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>

Что я должен изменить, чтобы сделать эту работу? мне нужно добавить некоторую конфигурацию в мой клиент Silverlight?

Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 30 июня 2011

После долгих поисков я нашел два решения, одно из которых я нашел в MSDN :

<bindings>
  <customBinding>
    <binding name="binaryHttpBinding">
      <binaryMessageEncoding/>
      <httpTransport authenticationScheme="Ntlm"/>
    </binding>
  </customBinding>
</bindings>

Другой был на форумах Silverlight :

<bindings>
  <customBinding>
    <binding name="binaryHttpBinding">
      <binaryMessageEncoding/>
      <httpTransport authenticationScheme="Negotiate"/>
    </binding>
  </customBinding>
</bindings>

Не знаю, в чем главное различие между этими двумя, мне удалось открыть сервис и успешно вызвать его из Silverlight. Если кто-то позвонит, уточните разницу, я был бы признателен.

0 голосов
/ 30 июня 2011

Я не использовал пользовательские привязки (пока), но эта запись в блоге может вам помочь: http://geekswithblogs.net/robz/archive/2007/10/03/wcf-impersonation---specifying-windows-authentication-credentials-on-the-service.aspx

...