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

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

我的问题:

我如何使WCF服务可以自由访问 没有表单验证。

我目前的困境是这样的:

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

错误:无法从中获取元数据 http://localhost/Services/MyService.svc如果这是您可以访问的Windows(R)通信基础服务,请检查您在指定地址启用了元数据发布。有关启用元数据出版的帮助,请参阅MSDN文档 http://go.microsoft.com/fwlink/?LinkId=65455.WS-元数据交换错误

有帮助吗?

解决方案 3

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

小时 在解决此问题时,我发现自定义身份验证模块拒绝我的客户端尝试获取元数据。可以说,我需要绕过这个逻辑。

哦 - 单步执行代码非常好 被低估的. ;)

其他提示

你有没有 mex endpoint 在您的 web.config 中为该服务定义了吗?测试客户端可能正在寻找这个。

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

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

<configuration>
   <authorization>
      <allow users="*" />
   </authorization>
</configuration>

如果您可以将 .svc 文件放入虚拟目录的子文件夹中,则可以利用 小路 表单身份验证中的属性,以允许使用不同级别的授权对其进行访问。 这是一个教程.

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

<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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top