我可以使用 301 重定向来允许现有的 .Net Web 服务继续运行而无需客户端更新吗?

Posted

技术标签:

【中文标题】我可以使用 301 重定向来允许现有的 .Net Web 服务继续运行而无需客户端更新吗?【英文标题】:Can i use a 301 redirect to allow an existing .Net Web service to keep functioning without requiring client updates? 【发布时间】:2017-03-17 05:37:16 【问题描述】:

我有一个网络服务接受来自客户端应用程序的数据,但现在所有者想要更改网络服务的域。如果 i 301 将旧域重定向到新域,Web 服务还能正常运行吗?我试图避免更新所有众多的客户端应用程序。

更多信息:因此,C# winforms 应用程序正在从 test.com/service.asmx 发送和提取数据,但是客户端正在将域更改为 newtest.com/service.asmx,并且 301 重定向了旧域。我尝试使用仍配置了旧域的 winform 应用程序连接到该服务,但它失败了。我可以在服务器或 Web 服务上执行任何配置来完成这项工作,而无需修改客户端应用程序?这个 .net 3.5 顺便说一句。

【问题讨论】:

客户知道如何处理 301 重定向吗? 不是 100% 确定您的意思,但是如果您询问客户端应用程序中是否有任何与重定向有关的编码,我不这么认为,因为在构建时不会出现这种情况。客户端对 Web 服务的调用非常基本: HC.TimeEntryWebService.time_entrySoapClient soapClient = new HC.TimeEntryWebService.time_entrySoapClient(); e.Result = soapClient.IsOnline(); 【参考方案1】:

我建议您使用基于 DNS 的解决方案,而不是在应用程序级别进行重定向。使用 CNAME 记录将旧域指向新域,或使用 A 记录将旧域指向 IP(如果 IP 是静态的)。

CNAME 记录提供了一个别名,这正是您在这里所需要的。

test.com CNAME newtest.com

如果您让我们知道 Web 服务的托管方式(物理、VM、AWS/Azure),我或许可以告诉您确切的解决方案。

这是假设客户将继续拥有旧域(连同新域),直到客户端应用程序处于活动状态。如果不是这样,那么 301 无论如何都不会工作。

【讨论】:

最有帮助的解决方案,可惜他们不想同时运行两个域。【参考方案2】:

答案是否定的,返回 301 响应并不能保证客户端重定向。这取决于客户端的实现。

我假设你的客户端是 .net 客户端,如果你使用的是 HttpWebClientProtocol...

https://msdn.microsoft.com/en-us/library/system.web.services.protocols.httpwebclientprotocol.allowautoredirect%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

...那么您需要将 AllowAutoRedirect 设置为 true,默认情况下此属性设置为 false。

但是,如果您使用的是 HttpWebRequest...

https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.allowautoredirect(v=vs.110).aspx

...AllowAutoRedirect 默认为 true。

如果不发布一些用于在您的客户端中发出请求的代码,就无法确定地回答这个问题。

无论哪种情况,我都不相信有办法使用应用程序配置来设置 AllowAutoRedirect 属性的值。

【讨论】:

以上是关于我可以使用 301 重定向来允许现有的 .Net Web 服务继续运行而无需客户端更新吗?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net 2005 中的 301 永久重定向

.htaccess 结合 301 重定向和 URI 重写

如何在 asp.net 中使用 301 重定向

ASP.NET IIS7 的永久 301 重定向

如何在 web.config 中配置 301 永久重定向?

PHP使用header+Location实现网站301重定向