WCF部署到IIS 6导致403权限错误

时间:2010-02-19 21:29:53

标签: wcf iis iis-6 wcf-security

之前我从未向IIS 6部署过WCF服务。我通过使用默认配置作为WCF项目的一部分,获得了我正在部署到IIS 6的服务。我从那以后简化了可能成为问题的配置思路。如果我在浏览器中浏览该服务,则会出现以下错误:

  

HTTP错误403.1 - 禁止:执行   访问被拒绝。

我的配置现在看起来像这样:

<system.serviceModel>
    <services>
        <service name="MyCompany.WebServices.MyService">
            <endpoint address="" binding="basicHttpBinding" contract="MyCompany.WebServices.IMyService" />
        </service>
    </services>
</system.serviceModel>

如果我尝试在ASP.NET MVC中添加它作为参考,我会得到以下结果:

  

下载时出错   'http://ws.mycompany.com/MyService.svc'。   请求因HTTP状态而失败   403:禁止。元数据包含一个   无法解决的参考:   'http://ws.mycompany.com/MyService.svc'。   禁止使用HTTP请求   客户认证方案   '匿名'。远程服务器   返回错误:(403)禁止。如果   该服务在当前定义   解决方案,尝试构建解决方案   并添加服务引用   试。

有什么想法可能会发生什么?

更新:

这似乎是我的IIS 6盒子上的配置问题。我假设这是因为我创建了一个全新的ASP.NET 3.5 WCF应用程序并将其部署到http://ws.unitedoneresources.com/Service1.svc的新URL。如果我尝试调用该服务,我会得到上面列出的相同HTTP错误。整个服务配置如下:

  <system.serviceModel>
    <services>
      <service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
        <!-- Service Endpoints -->
        <endpoint address="" binding="wsHttpBinding" contract="WcfService1.IService1">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfService1.Service1Behavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

同样,这是一个全新的ASP.NET 3.5 WCF应用程序,因此我没有对项目本身进行任何修改。

4 个答案:

答案 0 :(得分:2)

我搞砸了我搞砸了网站,在IIS 6上安装了WCF(在命令提示符下使用ServiceModelReg.exe / i / x),然后重新部署。它奏效了!

谢谢!

答案 1 :(得分:1)

找到这个问题,寻找同一问题的解决方案。我忘了更改服务目录中“脚本和可执行文件”的权限。我在II7上

答案 2 :(得分:0)

你真的没有给我们很多东西 - 缺少的是服务器端配置位,告诉我们你如何设置安全性 - 请你更新你的问题并告诉我们一切在服务器端配置的<system.serviceModel>标签内以及调用服务器的客户端上?

从系统默认值中猜测,使用basicHttpBinding会导致默认安全设置为空 - 并且看起来好像您的服务器端配置需要某种形式的安全性。几乎看起来您的安全设置不同步,从而导致此错误。

另一点是:你是如何设置IIS端的?您是否为服务创建了虚拟目录?基本上,在IIS中托管时,您的服务URL由服务器名称(可能还有端口),* .svc文件所在的虚拟目录以及svc文件本身的名称和扩展名确定。

答案 3 :(得分:0)

我们有类似的症状,但只有IIS 6.0下的PUT和DELETE谓词。

默认情况下,IIS应用程序中的.svc扩展名只允许使用GET,POST谓词。

为应用程序添加.svc扩展名的动词(或允许所有动词)修复了该问题。