我有一个名为 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”部分?
或者有没有其他方法可以摆脱这个异常?
先感谢您。