如何在没有表单身份验证的虚拟目录中公开WCF服务?

时间:2010-02-08 16:23:21

标签: asp.net-mvc wcf forms-authentication iis-5

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

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

我的问题:

  

如何自由地制作WCF服务   可访问,即没有   表单的身份验证。

我目前的困境是:

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

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

4 个答案:

答案 0 :(得分:2)

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

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

因此,如果网站为localhost,请将WCF服务放入localhost/services/myservice.svc等。然后将web.config添加到/services文件夹,该文件夹将覆盖授权并允许所有:

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

答案 1 :(得分:1)

如果您可以将.svc文件放入虚拟目录的子文件夹中,则可以利用Forms身份验证中的路径属性,以使用不同级别的授权来访问它。 Here is a tutorial

答案 2 :(得分: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>

答案 3 :(得分:1)

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

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

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