如何在没有表单身份验证的虚拟目录中公开 WCF 服务?
-
19-09-2019 - |
题
我的小组使用表单身份验证构建内部托管的 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>