我有一个使用WSHttpBinding和Windows身份验证的简单WCF服务。我试图强制服务器在每次调用此服务的方法时冒充客户端的身份。
我尝试了WCF Service Impersonation给出的建议,但结果并不完美。当我尝试导航到WCF服务的登录页面时,我看到错误:
合约操作'GetAdvice' 需要Windows身份 自动模仿。一个Windows 表示调用者的身份 不是通过约束提供的 ( '的WSHttpBinding', 'http://tempuri.org/') 合同 ( 'IMagicEightBallService', 'http://tempuri.org/'。
关于此错误试图告诉我的任何想法?
可以在ftp://petio.org/2011/07/01/MagicEightBall/浏览整个解决方案(或在http://petio.org/2011/07/01/MagicEightBall.zip下载)。我只是将项目发布到本地IIS文件夹并访问http://localhost/MagicEightBall/MagicEightBallService.svc处的服务。
谢谢!
更新:
我的服务的Web.config:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="Petio.MagicEightBall.MagicEightBallService" behaviorConfiguration="MagicEightBallServiceBehavior">
<endpoint name="WSHttpBinding_WindowsSecurity_IMagicEightBallService"
address="http://localhost/MagicEightBall/MagicEightBallService.svc"
binding="wsHttpBinding"
contract="Petio.MagicEightBall.IMagicEightBallService" />
<endpoint address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MagicEightBallServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceAuthorization impersonateCallerForAllOperations="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
我的服务代码:
public class MagicEightBallService : IMagicEightBallService
{
[OperationBehavior(Impersonation=ImpersonationOption.Required)]
public string GetAdvice()
{
MagicEightBall ball = new MagicEightBall();
return ball.GetAdvice();
}
}
答案 0 :(得分:4)
如何将整个问题最小化到最简单的可重现代码,您可以在此处显示?没有人有兴趣下载和审查整个项目。此外,为了以后的参考,相关的代码应该仍然在这里。
我检查了您的项目和客户端代码的正确配置,我发现了两个阻塞问题:
Here你有一些关于假冒和所有必要/可能设置的文章。