WCF通过配置模拟
本文关键字:模拟 配置 WCF | 更新日期: 2023-09-27 18:00:49
我有一个简单的WCF服务,它使用WSHttpBinding和Windows身份验证。我试图强制服务器在每次调用该服务的方法时模拟客户端的身份。
我尝试了WCF服务模拟中给出的建议,但并没有得到令人满意的结果。当我尝试导航到WCF服务的登录页时,我看到错误:
合同操作"GetAdvice"需要的Windows标识自动模拟。A Windows表示调用者的标识是未通过绑定提供('SHttpBinding','http://tempuri.org/'(合同("MagicEightBallService"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();
}
}
如何将整个问题最小化为最简单的可重复代码,您可以在这里简单地显示这些代码?没有人对下载和审查整个项目感兴趣。此外,为了以后参考,相关代码应该仍然在这里。
我检查了你的项目和客户端代码的配置,发现了两个阻塞问题:
- 如果您想从配置中强制执行模拟,则必须仅使用具有windows身份验证的绑定-通过HTTPS公开的端点没有身份验证
- WCF中的模拟还要求客户端允许服务模拟其身份,因此仅在服务上设置配置是不够的
这里有一些关于模拟和所有必要/可能的设置的文章。