2

我的小组使用表单身份验证构建内部托管的 ASP.NET MVC 网站。

我想在与 ASP.NET MVC 网站相同的虚拟目录中托管 WCF 服务。

我的问题:

如何使 WCF 服务可自由访问,即无需 表单身份验证。

我现在的困境是这样的:

  • 如果我首先使用 Web 浏览器通过表单身份验证进行身份验证,我可以访问 .svc 并查看 wsdl 信息。
  • 但是当我尝试使用 wcfTestClient.exe 访问 WCF 服务时,出现以下错误:

错误:无法从 http://localhost/Services/MyService.svc获取元数据 如果这是您有权访问的 Windows (R) Communication Foundation 服务,请检查您是否已在指定地址启用元数据发布。有关启用元数据发布的帮助,请参阅位于 http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error的 MSDN 文档

4

4 回答 4

2

您是否mex endpoint在 web.config 中为该服务定义了一个?测试客户端可能正在寻找这个。

如果这样做,另一种可能性是禁用服务文件夹的授权。我从来没有测试过这个,但理论上它可能会工作......

所以如果网站是localhost,放入WCF服务localhost/services/myservice.svc之类的。然后将 web.config 添加到/services文件夹中,它会覆盖授权并允许所有:

<configuration>
   <authorization>
      <allow users="*" />
   </authorization>
</configuration>
于 2010-02-08T16:39:47.047 回答
1

我假设由于您使用的是表单身份验证,因此虚拟目录配置为在 IIS 中进行匿名访问。话虽如此,如果您将 WCF 服务(例如 *.svc 文件)放在其自己的目录中,则可以更新主 web.config 文件并添加位置标记以禁用包含该服务的目录的表单身份验证。还要确保通过 web.config<system.servicemodel>部分中的 WCF 配置绑定设置禁用安全性,如果尚未存在,则需要添加该设置:

<bindings>
  <wsHttpBinding>   <!-- one of many possible bindings -->
    <binding name="...">          
      <security mode="None"> <-- allows anonymous access -->
        <message clientCredentialType="None"/> <-- allows anonymous access -->
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
于 2010-02-08T16:57:53.367 回答
1

如果您可以将 .svc 文件放入虚拟目录的子文件夹中,则可以利用 Forms Authentication 中的路径属性来启用对它的访问权限级别不同的授权。这是一个教程

于 2010-02-08T16:38:47.820 回答
1

非常感谢所有试图回答这个问题的人。

经过数小时的故障排除后,我发现自定义身份验证模块拒绝了我的客户端获取元数据的尝试。我只想说,我需要绕过这个逻辑。

哦 - 单步执行代码被低估了。;)

于 2010-02-09T19:27:34.097 回答