在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服务绝对不是静态文件。