WCF,Windows 2016上出现错误405,但2008年不出现

时间:2019-10-01 16:40:56

标签: c# web-services wcf

在ASP.NET 4.52(Silverlight客户端)下运行的WCF服务。托管在Windows 2008 R2上时,该应用曾经可以运行。现在,我已经在Windows 2016服务器上进行了设置,并且第一个服务调用出现错误405错误-不允许使用该方法。这里的方法是POST。错误说明如下:

  

405-不允许用于访问此页面的HTTP动词。

在基于Windows 2008的实例上,它也是POST,但是后端对此没有问题。该服务使用带有Windows身份验证的HTTPS。

相关的Web.config位是:

    <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="winAuthBasicHttpBinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
          <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
          <security mode="Transport">
            <transport clientCredentialType="Ntlm"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Foo.Web.Services.FooBehavior">
          <serviceMetadata httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="Foo.Web.Services.FooBehavior" name="Foo.Web.Services.FooService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="winAuthBasicHttpBinding" contract="Foo.Web.Services.IFooService">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
      </service>
    </services>
    </system.serviceModel>

[OperationContract]之外,错误方法没有注释。该接口仅包含[ServiceContract]。服务类具有:

    [WcfErrorBehavior]
    [WcfSilverlightFaultBehavior]    
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

该方法没有参数可能相关;我相信WCF的最新版本会使用GET。该应用程序已经很旧了。

该错误是通过通用HTTP客户端重现的,并非特定于Silverlight前端。

.NET版本之间的机器级WCF配置似乎有所不同。不太可能是Windows 2016框上缺少Windows组件。

编辑:启用了请求跟踪,返回了一些内容。 EXECUTE_REQUEST_HANDLER已发送一条通知到StaticFileModule。 WCF服务绝对不是静态文件。

2 个答案:

答案 0 :(得分:0)

在服务器管理器的角色和功能下,WCF类别中缺少“ HTTP激活”。我的第二个预感是正确的。也就是说,该错误在某种程度上具有误导性,因此为了后代的缘故,我将在此保留这个问题。

答案 1 :(得分:0)

无论如何,我想回复此主题。对于遇到类似问题的人可能很有用。
正如您提到的,@ Seva Alekseyev用于承载由Webhttp绑定在IIS中创建的WCF服务以及其他协议(例如Nettcpbinding),我们应该启用某些Windows功能。 enter image description here
对于NetTcpbinding,我们还需要启用以下Windows功能。
enter image description here
随时让我知道是否有什么可以帮助您的。