我目前正在开发一个使用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客户端添加一些配置?
提前致谢:)
答案 0 :(得分:0)
我还没有使用过自定义绑定,但是这篇博文可能会给你一些帮助:http://geekswithblogs.net/robz/archive/2007/10/03/wcf-impersonation---specifying-windows-authentication-credentials-on-the-service.aspx
答案 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中调用它。如果有人详细说明差异,我将不胜感激。