假设我目前有一个符合此合同的(实时)WCF Web 服务
namespace MyWeb
{
[ServiceContract]
public interface IMyWebService
{
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "VersionCheck/")]
bool VersionCheck(string version, string device);
}
}
这目前按预期工作;Web 客户端使用 AJAX 将参数(作为 JSON 字符串)发布到服务,然后 Web 服务返回 JSON 响应。
但是,我需要破坏即将推出的客户端版本的 API 兼容性,并且我不能保证所有用户都会立即使用客户端的更新版本。
我想做的是以下几点:
- 重命名
MyWebService
为指示它所针对的客户端版本的名称,例如MyWebService_1_0
. - 创建一个与IRequestReplyRouter相同的新路由服务,并将其命名
MyWebService
为替代现有服务 - 在请求的 HTTP 标头中包含一个
version
标头,以便新的MyWebService
可以确定MyWebService_1_0
要路由到的适当的实际服务(在本例中为 )。
从理论上讲,这似乎很简单。我遇到的问题是,每当我尝试创建上述服务时,Ajax 调用就会www.mywebsite.com/MyWebService.svc/VersionCheck/
完全失败(请记住,在这种情况下,MyWebService
它是一个路由服务,而不是我们开始使用的那个服务)。
我想我的问题是,在这种情况下,我能做些什么来让路由器作为替代品工作?或者,有没有更好的方法来处理这个问题?目前无法进行客户端更新。