我已使用以下配置设置WCF服务以要求NTLM身份验证:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="BinarySecurityBinding">
<binaryMessageEncoding/>
<httpTransport authenticationScheme="Ntlm"/>
</binding>
</customBinding>
</bindings>
<services>
<service name="Services.LogisticsServices" behaviorConfiguration="ServiceBehavior">
<endpoint address="" binding="customBinding" bindingConfiguration="BinarySecurityBinding" contract="Services.ILogisticsServices" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
我这样做是为了让使用Web服务的应用程序被强制登录,因为我的所有服务操作都使用模拟([OperationBehavior(Impersonation = ImpersonationOption.Required)]
)。
在IIS 7中,我启用了匿名和Windows身份验证。
当我访问承载上述服务的http://test.server/LogisticsServices.svc
时,我可以匿名查看默认服务描述页面。但是,当Visual Studio尝试访问http://test.server/LogisticsServices.svc/$metadata
以生成客户端代理时,服务器正在使用HTTP代码401进行响应并期望进行身份验证。我不仅希望匿名提供元数据,而且服务器不接受我提供的凭据(即使我知道它们是正确的)。
测试不同的配置,我尝试从绑定的传输中删除authenticationScheme
,只是为了能够生成客户端代理,但这会导致异常,因为服务的操作需要模拟([OperationBehavior(Impersonation = ImpersonationOption.Required)]
)
我的服务配置中缺少哪些内容可以匿名提供服务的元数据?如果我接近整个错误,我也愿意接受建议。
答案 0 :(得分:0)
答案 1 :(得分:0)
解决此问题的一种方法是不使用自动生成的代理。
如果我们控制服务器和客户端,我们发现避免使用自动生成的代理会更有效率。
有关如何执行此操作的截屏视频,请访问:http://www.dnrtv.com/default.aspx?showNum=122
您可以尝试命令式而非声明性模型,请参阅:http://msdn.microsoft.com/en-us/library/ms730088.aspx