在自托管WCF中进行模拟?

时间:2011-06-30 05:53:06

标签: c# silverlight wcf impersonation

我目前正在开发一个使用Self-Hosted SL Svc模板在Windows服务中托管的WCF服务。 模板可以正常工作,我可以从我的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 :(得分:0)

答案 1 :(得分:0)

经过长时间的搜索,我找到了两个解决方案,我在MSDN找到了一个解决方案:

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

另一个人在Silverlight forums

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

不知道这两者之间的主要区别是什么,我已成功打开服务并成功从Silverlight中调用它。如果有人详细说明差异,我将不胜感激。