我可以使用 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 服务继续运行而无需客户端更新吗?的主要内容,如果未能解决你的问题,请参考以下文章