如果您在尝试修改IIS中的主机头后从IIS收到404 BadRequest错误,这很常见,但有一个修复!
WCF如何支持每个站点指定的多个IIS绑定?:http:
//tinyurl.com/55q5hg
或者,下面的文章解释了一个开发人员如何使用配置和代码的组合解决了这个问题:
嗯,这很有趣!WCF,SSL和主机标题的冒险
http://geekswithblogs.net/rakker/archive/2008/07/03/123562.aspx
文章引用了两个重要的链接......
第一个解释了如何在IIS中正确设置主机头:
配置SSL主机标头的服务器绑定(IIS 6.0):http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/8d9f2a8f-cd23-448c-b2c7-f4e87b9e2d2c.mspx? mfr= true
让主机头工作后,你会发现......
"你不能有多个主机头为IIS或wcf将打破"
解决这个限制的解决方案可以在本文中找到,并且还对上面的GeeksWithBlogs.net文章提供了一个评论,它提供了一个增强的变体:
WCF:此集合已包含方案http:http://tinyurl.com/62yssd的地址
如果您仍遇到问题,请在下面的评论中告诉我们......
我对WCF的经验是,它有时非常棘手,特别是在配置方面.如果一个人遵循最佳实践并且没有做任何非标准的操作,那么绝大多数部署问题都是由于配置文件出现问题而造成的.
理论上(在实践中并非如此,由于架构差异),在IIS上设置WCF服务应该与为Web应用程序或ASMX Web服务设置典型的虚拟目录和相应的应用程序没有什么不同.
因此,我建议如果这是您向Internet公开的第一个WCF服务,请遵循在公开您的第一个网站时采用的相同简单方法.基本上,创建一个新的示例"WCF服务应用程序"(这可以在"添加新项目"对话框的C#或VB的Web部分下找到).
使其工作后,请按照部署实践将其移至生产沙箱并在本地进行测试.该沙箱优选地已经安装了一些网站或Web服务,并且已知可以从因特网访问,以消除对典型网络配置问题的任何疑问.如果您有一个已从该服务器成功在Internet上公开的示例ASMX Web服务,那将是最好的.
接下来,尝试从Web浏览器测试ASMX和WCF服务,包括服务器本地,内部其他桌面,最后是外部.
我们希望测试从Web浏览器访问标准SVC和ASMX文件,以及各种可用且相关的URL风格.结果应该类似,在窗口中有关于服务呈现的摘要页面.不同之处在于,如果未在web.config文件中禁用该功能,ASMX Web服务的摘要可能允许您在服务上执行Web方法.
比较以下样式的URL的浏览器提取结果...
http:// localhost/WcfService1/Service1.SVC
http:// localhost/WcfService1/Service1.ASMX
http:// MachineName或MachineFQN/WcfService1/Service1.SVC
http:// MachineName或MachineFQN/WcfService1/Service1.ASMX
http:// MachineLocalIP#1/WcfService1/Service1.SVC
http:// MachineLocalIP#1/WcfService1/Service1.ASMX
http:// MachineLocalIP#2/WcfService1/Service1.SVC
http:// MachineLocalIP#2/WcfService1/Service1.ASMX
http:// ExternalIP/WcfService1/Service1.SVC
http:// ExternalIP/WcfService1/Service1.ASMX
所有这些测试都应该返回类似的结果.
如果您愿意,请从Web浏览器开始,在ASMX Web服务上测试一些Web方法,以获取任何经过测试的URL.您很快就会看到我们可以用不同的方式测试ASMX Web服务......
接下来,我们将使用Visual Studio 2008发行版(C:\ Program Files\Microsoft Visual Studio 9.0\Common7\IDE)中的WcfTestClient.exe应用程序在WCF服务和ASMX Web服务上测试Web方法.
您需要通过File-> Add Service菜单项添加服务,在上面输入您要测试的每个服务URL的URL.确保包含SVC和ASMX文件的文件名.如果一切正常,则由
web.config文件中元素的"httpGetEnabled"属性启用的MEX端点将返回该实用程序运行所必需的数据,从而使用我们的服务方法清单填充树.像这样:
从这一点来看,参考以下资源将是有用的:
WCFTestClient:http://msdn.microsoft.com/en-us/library/bb552364.aspx
Visual Studio 2008中WCF的新增功能:http://msdn.microsoft.com/en-us/magazine/cc163289.aspx
如果你做到这一点,那么我不期望任何其他问题,你现在应该尝试将样本的设置与你试图发布到Internet的WCF服务进行比较,并希望差异是显而易见的.
请记住在诊断期间将WCF服务视为ASMX Web服务,假设已知web.config已正确设置.
如果仍然无法使其工作,请查看本指南以获取进一步的技术建议:
部署IIS托管的WCF服务:http://msdn.microsoft.com/en-us/library/aa751792.aspx
最后,如果所有其他方法都失败了,只需将您的WCF服务包装在ASMX Web服务中:
如何:将WCF服务也作为ASMX Web服务公开:http://kjellsj.blogspot.com/2006/12/how-to-expose-wcf-service-also-as-asmx.html