GetTrackingLink という名前の関数を持つ WCF サービスがあります。
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public BasicResponse GetTrackingLink(string orderID)
{
BasicResponse response = new
if (orderID == null)
response.Status = "null";
else
response.Status = "not null";
return response;
}
次のスクリプトを使用して、別のページからこの関数を呼び出します。
$.ajax({
type: 'GET',
url: 'http://localhost:14113/Service1.svc/GetTrackingLink',
crossDomain: true,
global: true,
dataType: 'jsonp',
data: {
"orderID": "006-0000001"
},
success: function (result) {
console.log("success");
},
error: function (result) {
console.log("error");
}
};
呼び出しは問題なく、データは GetTrackingLink に正しく送信されます。問題は、次の構成を使用して WCF トレースをアクティブにしたことです。
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Critical, Error, Warning, Information, ActivityTracing" propagateActivity="true">
<listeners>
<add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="C:\inetpub\logs\RAFProdTraces2.svclog"></add>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="messages" type="System.Diagnostics.XmlWriterTraceListener" initializeData="C:\inetpub\logs\RAFProdTracesMessages2.svclog" />
</listeners>
</source>
</sources>
...そして、GetTrackingLink を呼び出すたびに、RAFProdTraces2.svclog に次のエラーが見つかりました: System.Xml.XmlException: 予期しない文字 'j' に遭遇しました。
これは、JSONP が次のようなリクエストでコールバックを送信するために発生することがわかっています。
GET /Service1.svc/GetTrackingLink?callback=jQuery1102024896297114901245_1383152659468&orderID=006-0000001
したがって、「jQuery」の「j」により、WCF 診断で例外がスローされます (「j」を他の文字に繰り返し置き換えたため、新しくスローされた例外には、「j」を置き換えるために使用した文字が含まれていたためです) )。
私の質問は、システム診断でリクエストを正しく解析し、「callback=jQuery1102024896297114901245_1383152659468」の部分を無視する方法はありますか?
または、この例外を取り除く他の方法はありますか?
前もって感謝します。