被“远程服务器返回错误:(403)禁止”与WCF服务在https中难倒

时间:2010-06-02 20:09:17

标签: c# .net asp.net wcf

我有一个WCF服务,由于这个错误我已经归结为几乎没有。它把我推到了墙上。这就是我现在所拥有的。

一个非常简单的WCF服务,其中一个方法返回一个值为“test”的字符串。

一个非常简单的Web应用程序,它使用该服务并将字符串的值放入标签中。

在Win 2003上使用SSL证书运行IIS 6的Web服务器。

在同一服务器上运行的其他WCF服务。

我将WCF服务发布到它的https位置

我在VS中以调试模式运行Web应用程序,它运行正常。

我将Web应用程序发布到WCF服务所在的同一服务器上的https位置,并使用相同的SSL证书

我得到,“远程服务器返回错误:(403)禁止”

我几乎已经改变了IIS中的每个设置以及WCF和Web应用程序都无济于事。我已经比较了WCF服务中的设置和一切都是一样的。

以下是WCF服务和WEB应用程序的web.config中的设置:

问题似乎与Web应用程序有关,但我没有想法。任何想法:

WCF服务:

  <system.serviceModel>
<bindings>

                                   

<client />

<services>
  <service behaviorConfiguration="Ucf.Smtp.Wcf.SmtpServiceBehavior" name="Ucf.Smtp.Wcf.SmtpService">
    <host>
      <baseAddresses>
        <add baseAddress="https://test.net.ucf.edu/webservices/Smtp/" />
      </baseAddresses>
    </host>
    <endpoint address="" binding="wsHttpBinding" contract="Ucf.Smtp.Wcf.ISmtpService" bindingConfiguration="SSLBinding">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="Ucf.Smtp.Wcf.SmtpServiceBehavior">
      <serviceMetadata httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" httpsHelpPageEnabled="True"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

网络应用程序:

    <system.serviceModel>
    <bindings><wsHttpBinding>
<binding name="WSHttpBinding_ISmtpService" closeTimeout="00:01:00"
 openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
 bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
 maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
 textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
 <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
  maxBytesPerRead="4096" maxNameTableCharCount="16384" />
 <reliableSession ordered="true" inactivityTimeout="00:10:00"
  enabled="false" />
 <security mode="Transport">
  <transport clientCredentialType="None" proxyCredentialType="None"
   realm="" />
  <message clientCredentialType="Windows" negotiateServiceCredential="true"
   establishSecurityContext="true" />
 </security>
</binding>

  

<client>


<endpoint address="https://net228.net.ucf.edu/webservices/smtp/SmtpService.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ISmtpService"
contract="SmtpService.ISmtpService" name="WSHttpBinding_ISmtpService">
<identity>
 <dns value="localhost" />
</identity>

  </client>
</system.serviceModel>

6 个答案:

答案 0 :(得分:4)

我会在花费数小时和数小时来解决这个问题后回答我自己的问题。我希望这有助于所有其他人在墙上试图解决这个问题。我们终于让一个网络管理员参与并解决了这个问题。

以下是方案和解决方案:

我们有一个生产服务器 - 一切正常。 我们有一个测试服务器 - 我们得到403禁止错误。 本地调试工作正常。

我们想到的所有设置都是相同的。

有一个设置错了。在IIS中,在“目录安全性”选项卡下的Web服务虚拟目录的属性中,第二个“编辑”按钮用于IP限制。我们设置为拒绝访问所有IP,除了应该包含测试服务器的IP的列表。测试Web服务器的IP未被授予权限。它没有权限的原因是它最近从生产虚拟服务器克隆,并且从未调整此设置以添加测试虚拟服务器。

答案 1 :(得分:1)

在我的情况下,我从另一台机器复制了源代码,并且此处尚未创建虚拟目录。一旦我去了项目属性并创建了虚拟目录,它就可以正常工作。

答案 2 :(得分:0)

唯一突然出现的情况是,您正在传递带有消息的Windows标识,如果传递的用户帐户无法访问WCF服务,则可能会导致权限问题。可能需要在网络应用上进行假冒?

答案 3 :(得分:0)

默认情况下,WCF绑定不允许匿名(无身份验证)访问。您需要modify the bindings才能允许它:

  <wsHttpBinding> 
    <binding ...> 
        <security mode ="None"/> 
    </binding> 
  </wsHttpBinding>

答案 4 :(得分:0)

在我的情况下,我的apppool用户由于某种原因没有对“C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files”的读/写访问权限。

答案 5 :(得分:0)

确保您设置了compilation debug="true"