我从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激活,等等)。
5条答案
按热度按时间klsxnrf11#
好吧,我放弃了,向微软支付了250美元的支持费。在技术人员的帮助下,我们找到了解决方案,昨晚证实了这绝对是我们所有服务器的解决方案:我们在web.config中完全禁用了WCF服务的SSL:
“传输”是指传输层安全(TLS是新的SSL),因此HTTPS。将其更改为:
事实证明,WCF对你使用的是HTTP还是HTTPS非常敏感,如果你用错了,你不会得到任何有用的错误,只有404。
在我的例子中,旧服务器和新服务器都被配置为在任何时候都使用HTTPS来保证安全。但是在新服务器上,SSL(TLS)加密在负载平衡器上终止。在这种情况下,加密只发生在用户的浏览器和我们的负载平衡器之间,而负载平衡器和Web服务器之间的流量是未加密的HTTP。
因此,服务在HTTPS上侦听,当请求来自HTTP时,它完全忽略它。
(All其他人在网上谈论类似的问题,主要集中在卸载和重新安装IIS、ASP.NET、WCF和HTTP激活等方面,所以我希望这能帮助一些人。如果你对MS堆栈有问题,所以不能及时回答,我推荐MS支持。这肯定比浪费几个小时试图单独修复它便宜得多)。
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
1hdlvixo3#
只是想提供一个建议的集合,如果你还没有尝试其中之一:
其他来源:
bvjxkvbb4#
您可以在
wcf
服务中启用跟踪/日志记录,这样您就可以直接从错误日志中检查错误的实际原因(如果参数或任何其他东西不匹配)。请参考此命令以启用跟踪,这只是简单的配置设置-http://msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx或How to turn on WCF tracing?
...
其他建议:
在
ServiceContract
中,对于required方法,您已经使用了required属性。因此,假设Service.svc在IService.cs
中定义了servicecontractor,并且您关注Method
。那么Method
应该如下声明。这里我使用
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
执行基于REST
的Get
请求。更多信息-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。nhaq1z215#
希望它会帮助一些人,虽然它的晚回复这篇文章。我得到了同样的问题,花了几个小时,几个小时来寻找解决方案。最后结束了改变
幸运的是,我得到了答案,更改RouteConfig.Cs文件如下From
至
只要您将.svc文件放在应用程序的根目录中即可。
这是我自己在这个链接WCF Service throws Http404 on any request except .svc上问的问题