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();
    }
}

WCF通过配置模拟

如何将整个问题最小化为最简单的可重复代码,您可以在这里简单地显示这些代码?没有人对下载和审查整个项目感兴趣。此外,为了以后参考,相关代码应该仍然在这里。

我检查了你的项目和客户端代码的配置,发现了两个阻塞问题:

  • 如果您想从配置中强制执行模拟,则必须仅使用具有windows身份验证的绑定-通过HTTPS公开的端点没有身份验证
  • WCF中的模拟还要求客户端允许服务模拟其身份,因此仅在服务上设置配置是不够的

这里有一些关于模拟和所有必要/可能的设置的文章。