【发布时间】:2011-09-27 00:18:54
【问题描述】:
我有一个使用 WSHttpBinding 和 Windows 身份验证的简单 WCF 服务。我试图强制服务器在每次调用此服务的方法时模拟客户端的身份。
我尝试了WCF Service Impersonation 给出的建议,但并没有完全得到满意的结果。当我尝试导航到 WCF 服务的登录页面时,我看到了错误:
合约操作“GetAdvice” 需要 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();
}
}
【问题讨论】:
标签: c# wcf windows-authentication impersonation