現在、このコントラクトに準拠する (ライブ) 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 文字列として) サービスに POST し、Web サービスは JSON 応答を返します。
ただし、今後のクライアント バージョンの API 互換性を破る必要があり、すべてのユーザーがクライアントの更新されたバージョンをすぐに使用できるとは限りません。
私がやりたいことは次のとおりです。
MyWebService
など、目的のクライアントのバージョンを示す名前に変更しますMyWebService_1_0
。- IRequestReplyRouterと同じ流れで新しいルーティング サービスを作成し
MyWebService
、既存のサービスのドロップイン置換として機能するように名前を付け ます。 - new がルーティング先
の適切な実際のサービス (この場合は ) を決定できる
version
ように、要求の HTTP ヘッダーにヘッダーを含めます。MyWebService
MyWebService_1_0
理論的には、これは簡単に思えます。私が直面している問題は、上記のサービスを作成しようとするたびに、Ajax 呼び出しwww.mywebsite.com/MyWebService.svc/VersionCheck/
が完全に失敗することです (この状況でMyWebService
はルーティング サービスであり、最初に使用したサービスとは異なります)。
私の質問は、この状況でルーターをドロップインの代替品として機能させるにはどうすればよいでしょうか? または、これを処理するためのより良い方法はありますか? 現時点では、クライアント側の更新は可能ではありません。