.NET 4.0のASP.NET Webサービスで、クラスに[ScriptService]、メソッドに[ScriptMethod]を付けると、応答がJSONで返るようになります。更に、[ScriptMethod(UseHttpGet=true)]とすると、GETメソッドでも呼び出せます。
じゃぁ、JSONPも実現できるだろ、ってことで、「"callback"ってパラメータがあったら、その値を名称としたfunctionを返すIHttpModule」を作成して、jQuery-1.6.2から呼び出してみました。
が、うまくいかず…。JSONPはGET専門なので、
http://hogehoge/hogeWebService.asmx/hogeMethod?calback=cb¶m1=val1¶m2=val2
って感じのURLを要求すると、
無効な JSON プリミティブです: val1
場所 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n
と言われます。URLクエリの値をJSON形式の文字列だと思ってやがる…。なじぇ?
ASP.NETの*.aspxで独自コードをゴリゴリ書けば、JSONPは実現できるけど、やっぱ、Webサービス的なPlain Old Object(*.asmx)で実現したいところ。できないのでしょうかね?