将我的ASP.NET网站移动到Windows Server 2012上的IIS 8 ...服务丢失:.svc文件是可查看的,但它们的方法给予了404

exdqitrt  于 2023-03-09  发布在  .NET
关注(0)|答案(5)|浏览(142)

我从Windows Server 2003上的IIS 6迁移过来。

我 * 可以 * 浏览到.svc文件。如果我在浏览器中转到http://example.com/Service.svc,我会看到一个很好的标准页面“这是Windows© Communication Foundation服务”。

但是我 * 不能 * 浏览到任何方法-如果我在浏览器中转到http://example.com/Service.svc/Method?parameter=xyz,我会得到404错误。

有人见过这样的东西吗有什么想法或建议吗?

我想我可能有一个类似的问题这个问题:WCF on IIS8; *.svc handler mapping doesn't work
但是症状是不同的(看起来他们根本看不到.svc文件),而且没有一个解决方案起作用(我安装了WCF特性的Http激活,等等)。

klsxnrf1

klsxnrf11#

好吧,我放弃了,向微软支付了250美元的支持费。在技术人员的帮助下,我们找到了解决方案,昨晚证实了这绝对是我们所有服务器的解决方案:我们在web.config中完全禁用了WCF服务的SSL:

<system.serviceModel>
    <bindings>
        <webHttpBinding>
            <binding>
                <security mode="Transport" />

“传输”是指传输层安全(TLS是新的SSL),因此HTTPS。将其更改为:

<system.serviceModel>
    <bindings>
        <webHttpBinding>
            <binding>
                <security mode="None" />

事实证明,WCF对你使用的是HTTP还是HTTPS非常敏感,如果你用错了,你不会得到任何有用的错误,只有404。
在我的例子中,旧服务器和新服务器都被配置为在任何时候都使用HTTPS来保证安全。但是在新服务器上,SSL(TLS)加密在负载平衡器上终止。在这种情况下,加密只发生在用户的浏览器和我们的负载平衡器之间,而负载平衡器和Web服务器之间的流量是未加密的HTTP
因此,服务在HTTPS上侦听,当请求来自HTTP时,它完全忽略它。
(All其他人在网上谈论类似的问题,主要集中在卸载和重新安装IIS、ASP.NET、WCF和HTTP激活等方面,所以我希望这能帮助一些人。如果你对MS堆栈有问题,所以不能及时回答,我推荐MS支持。这肯定比浪费几个小时试图单独修复它便宜得多)。

qcbq4gxm

qcbq4gxm2#

请检查您的IIS是否添加了svc处理程序。
WCF服务在默认配置下不会在IIS 8上运行,因为Web服务器不知道如何处理针对.svc文件的传入请求。您可以通过两个步骤进行教学:
1.添加新MIME类型:
Extension: .svc MIME type: application/octet-stream

1.添加新的托管HTTP处理程序:
Request path: *.svc Type: System.ServiceModel.Activation.HttpHandler Name: svc-Integrated

刷新网站/Web应用程序
参考文献:
http://gyorgybalassy.wordpress.com/2012/09/24/publishing-a-wcf-service-on-iis8/
http://proq.blogspot.hk/2012/09/wcf-on-iis-and-windows-8.html
http://forums.iis.net/t/1200413.aspx?+svc+missing+can+t+find+Module+to+load+within+Handler+Mapping+IIS+8+0

1hdlvixo

1hdlvixo3#

只是想提供一个建议的集合,如果你还没有尝试其中之一:

  • 是否可能缺少预期方法的[OperationContract]?
  • 您是否在web.config中配置了URL重写,以重定向方法调用,例如HTTP/S重定向或一些路由配置?
  • 在您的IIS中启用失败请求跟踪,以查看您收到的是404错误的哪种子类型?404.13?其他错误?这可能不是因为找不到某些错误,而是请求中的其他错误。

其他来源:

bvjxkvbb

bvjxkvbb4#

您可以在wcf服务中启用跟踪/日志记录,这样您就可以直接从错误日志中检查错误的实际原因(如果参数或任何其他东西不匹配)。
请参考此命令以启用跟踪,这只是简单的配置设置-http://msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspxHow to turn on WCF tracing?
...
其他建议:
ServiceContract中,对于required方法,您已经使用了required属性。因此,假设Service.svc在IService.cs中定义了servicecontractor,并且您关注Method。那么Method应该如下声明。

[OperationContract]
[WebGet(UriTemplate = "Method?parameter={value}")]
string AnyMethodName(string value);

这里我使用string作为输入和输出参数类型,你可以在这里使用required类型。除此之外,你需要有所需的web.config来正确配置服务,绑定,端点等。参考-http://msdn.microsoft.com/en-us/library/ms733932(v=vs.110).aspx
因此,如果将其托管在http://www.example.com中,则可以使用http://www.example.com/Service.svc/Method?parameter=XYZ执行基于RESTGet请求。
更多信息-http://www.c-sharpcorner.com/UploadFile/b1df45/rest-based-api-using-wcf-services/
此外,如上所述,可能有一些URL rewriting设置,您已经检查并修复。或尝试直接使用https版本的URL。或者,如果有一些代理服务器正在阻止,必须进行检查。
如果存在request filtering设置,则检查GET请求是否在那里被阻止。
或者,如果可能,使用aspnet_regiis.exe -iru重新注册IIS。

nhaq1z21

nhaq1z215#

希望它会帮助一些人,虽然它的晚回复这篇文章。我得到了同样的问题,花了几个小时,几个小时来寻找解决方案。最后结束了改变
幸运的是,我得到了答案,更改RouteConfig.Cs文件如下From

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.IgnoreRoute("{resource}.svc/{*pathInfo}");

只要您将.svc文件放在应用程序的根目录中即可。
这是我自己在这个链接WCF Service throws Http404 on any request except .svc上问的问题

相关问题