WCF 403错误

时间:2009-05-11 19:59:16

标签: c# wcf web-services iis

我在使用WCF服务时遇到了不同的错误。到目前为止,这项服务在我们所有的测试环境中都运行良好。我们通常在Windows Server 2003上的IIS 6下运行它。我让它在连接到我们公司域的Windows XP Pro VM下运行。我们的IT人员最近刚从公司域中删除了虚拟机。

现在我收到这样的错误:

  

强行建立现有连接   由远程主机关闭。

     

远程服务器返回错误:   (403)禁止。

     

禁止使用HTTP请求   客户认证方案   '匿名'。

IIS配置为允许匿名访问。 IIS用户还有权在服务文件夹中查看/执行。

该服务适用于某些呼叫但不适用于其他呼叫。应用程序在加载时调用服务,但稍后在单独的调用中执行此操作。

该服务正在使用wsHttpBinding:

 <wsHttpBinding>
    <binding name="wsHttpBindingSettings" maxReceivedMessageSize="2147483647">
      <security mode="None">
        <transport clientCredentialType="None" />
        <message establishSecurityContext="false" />
      </security>
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </wsHttpBinding>

4 个答案:

答案 0 :(得分:1)

我认为这个问题的关键是它在Windows XP上的IIS 5中运行。 XP中的IIS 5的最大连接数为10.一旦超过该限制,我相信我们收到403错误。我们通过使用Server 2008 VM而不是XP在笔记本电脑上进行演示来解决此问题。

答案 1 :(得分:0)

该服务适用于某些呼叫但不适用于其他呼叫。应用程序在加载时调用服务,但稍后在单独的调用中执行此操作。

也许有效的调用没有执行任何敏感操作,比如访问数据库或文件?在IIS应用程序池的运行权限下,它是否使用客户端模拟?这可以解释这个问题..

您也可以尝试此设置:

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="xyz">
          <!-- 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="True"/>

答案 2 :(得分:0)

同样的问题,我通过向端点添加默认绑定并在可能的情况下明确将安全级别设置为“无”来缓解问题,现在它工作得更好但是如果对服务器的调用过于频繁则会失败再次,我也注意到即使频率很高,VS2008中的开发网络服务器也不会失败。 因此它应该以某种方式与IIS相关,我怀疑这是与安全上下文的持续时间有关但这些只是我的猜测到目前为止,我还没有找到真正的解决方案

答案 3 :(得分:0)

可能是由IIS和web.config中的安全设置组合引起的。

如果IIS中的设置是集成的并且是匿名的,并且web.config中的设置设置为windows,则使用impersonate = false。

然后,当机器在域中时,将使用集成身份验证,一切正常。

当从域中删除计算机时,将使用匿名身份验证,然后它将是用于访问资源的IIS匿名用户。此用户具有有限的权限,因此某些调用可能会失败。

您可以将web.config中的设置更改为impersonate = false,这意味着将使用应用程序池的标识来访问资源。