WCF + IIS重定向失败,是否可能?

时间:2011-07-22 16:24:23

标签: .net wcf http iis soap

我正在尝试将实时的活动WCF服务(SOAP,标准HTTP绑定配置)迁移到[在IIS 7上]的新服务器,而无需重新部署客户端。有问题的WCF服务是“中央服务”,它保存配置信息并将控制权交给其他服务。

新的服务器/服务到位,都使用SSL / HTTPS并拥有有效的证书。

我在旧/源IIS [IIS 6]上设置了一个新的虚拟目录作为测试,设置为“重定向到URL”,输入了新的服务URL。使用Web浏览器,URL转发正确完成,我可以浏览到该服务,没有HTTPS警告或其他消息 - 路径和URL的重要部分保留,所有似乎都正常。

然而,WCF调用失败。我很确定它试图将重定向响应解释为WCF SOAP响应并且显然失败了,这是记录的异常:

Error: The content type text/html; charset=UTF-8 of the response message does not match the content type of the binding (application/soap+xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were:
'<HTML><HEAD><link rel="alternate" type="text/xml" href="https://server-name-here/service-path-here.svc?disco"/>
<STYLE type="text/css">#content{ FONT-SIZE: 0.7em; PADDING-BOTTOM: 2em; MARGIN-LEFT: 30px}BODY{MARGIN-TOP: 0px; MARGIN-LEFT: 0px; COLOR: #000000; FONT-FAMILY: Verdana; BACKGROUND-COLOR: white}P{MARGIN-TOP: 0px; MARGIN-BOTTOM: 12px; COLOR: #000000; FONT-FAMILY: Verdana}PRE{BORDER-RIGHT: #f0f0e0 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #f0f0e0 1px solid; MARGIN-TOP: -5px; PADDING-LEFT: 5px; FONT-SIZE: 1.2em; PADDING-BOTTOM: 5px; BORDER-LEFT: #f0f0e0 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #f0f0e0 1px solid; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e5e5cc}.heading1{MARGIN-TOP: 0px; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: 26px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 3px; MARGIN-LEFT: -30px; WIDTH: 100%; COLOR: #ffffff; PADDING-TOP: 10px; FONT-FAMILY: Tahoma; BACKGROUND-COLOR: #003366}.intro{MARGIN-LEFT: -15px}</STYLE><TITLE>Service-Name-Here'.

这有什么办法吗?我正在尝试减少来自服务器和持续/活动连接的负载,因为此服务负载相当大。我希望转发会导致客户端缓存新的URL,并且只在重定向到期或类似的情况下不经常向初始URL发出请求。

我已经阅读了各种问题和博客,例如说重定向会要求客户端进行GET而不是POST,但我没有看到,只是上面的消息。

2 个答案:

答案 0 :(得分:3)

您已经回答了自己的问题,客户端中的WCF HTTP处理代码无法对HTTP 301或类似的响应进行操作,无法将服务调用重定向到浏览器等其他URL。我不能记录这个,但WCF客户端代码只处理它配置的响应类型(在您的情况下为HTTP + soap)。

答案 1 :(得分:1)

如果您可以选择将旧服务器升级到Windows Server 2008,那么值得关注的是IIS Application Request Routing extension。它易于安装和配置,URL重写规则非常灵活。我已经将它用于代理(例如,通过面向互联网的Web服务器公开内部托管的服务)并且它运行良好。它不会消除旧服务器上的工作,但会将其限制在少量。

如果操作系统升级不可行,上面链接的路由器服务建议是您的下一个最佳选择。