uri テンプレートを使用する WCF REST API があります。これらの Uri テンプレートの 1 つは、[WebGet(UriTemplate="List/Data.svc/$count")] のようになります。
Windows 2008r2 では、この URL は正常に機能しますが、一部の 2012 サーバーでは失敗します。ログ (IIS ログではなく、私が内部的に書いたログ) を見ると、2008r2 要求は次のようになります。
"http://myserver:40217/List/Data.svc/$count"
2012 サーバーの URL は次のようになります。
"http://myserver:40217/List/Data.svc/%24count"
同じデバイス上のまったく同じアプリが両方のリクエストを行っているため、99.999% 確信しており、これはアプリがリクエストを行う方法に違いはありません。
WCF は着信要求に対して URL エンコードを行いますか?
WCF 用の Windows Server 2012 上の .NET 4.5 に関連する KB 修正がかなりありますが、包括的なリストを見つけることができず、この問題に関連していると思われる修正も見つかりませんでした。
Windows 2012 サーバーでは、.../test.svc/$test に移動すると動作し、「テストは成功しました!」と表示されます。Windows Server 2012 r2 サーバーで同じことを行うと、「Bad!! This is not the right route!」となります。
[WebGet(UriTemplate = "$test")]
public System.IO.Stream GetTest()
{
return new MemoryStream(System.Text.Encoding.UTF8.GetBytes("test succesful!"));
}
[WebGet(UriTemplate = "{id}")]
public System.IO.Stream GetById(string id)
{
if (id == "$test")
return new MemoryStream(System.Text.Encoding.UTF8.GetBytes( "Bad!! This is not the right route!"));
else
return
new MemoryStream(System.Text.Encoding.UTF8.GetBytes("You did a get by Id on " + id));
}