私は現在、WCFデータサービスをライブで利用していwww.mywebsite.com
ます。これは、次のような基本的なサービスです。
namespace MyWeb
{
[JSONPSupportBehavior]
public class MyDataService : DataService<MyEntities>
{
public static void InitializeService(IDataServiceConfiguration config)
{
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("Entities", EntitySetRights.AllRead);
ServiceOperationRights.All);
}
}
}
現在、次のようなajax呼び出しを投稿してリクエストを行うライブクライアントがあります。
$.ajax({
url: serverAddress + "MyDataService.svc/Entities?$top=20&$filter=IsConfirmed%20eq%20null&$format=json&$callback=?",
headers: {
version: "1.0",
platform: "a platform"
},
timeout: 12000,
dataType: 'jsonp',
cache: false,
context: document.body
})
これは期待どおりに機能し、Entitiesテーブルに必要なオブジェクトを含むjavascriptオブジェクトを返します。
ただし、このクエリから返される結果を制限するインテリジェンスをサーバー側に追加したいと思います。MyDataService
そのために、前述のクラスにクエリインターセプターを実装しようとしました。
[QueryInterceptor("Entities")]
public IQueryable<Entity> OnQueryFares(IQueryable<Entity> query)
{
return from e in query
where DataCheck(e)
select e;
}
意図されたロジックでは、サービスはDataCheck(e)がtrueと評価したテーブルエントリのみを返すようになりました。この機能は機能しているようです。ただし、クライアントでテストすると、次のエラーが発生します。
Web Console(4448): Uncaught SyntaxError: Unexpected token < at
http://www.mywebsite.com/MyDataService.svc/Entities?$top=20&$filter=IsConfirmed%20eq%20null&$format=json&$callback=jQuery17207441281890496612_1340223164872&_=1340223166622:1
この特定のエラーにより、何らかの理由で、実装したクエリインスペクターから返されるデータは、インターセプターを実装する前のクエリのようにJSONで送信されるのではなく、XMLで送信されると推測しました。
私はこれに関する指示を見つけることができませんでした。クエリインターセプターでJSON応答動作を強制するにはどうすればよいですか?