У меня есть служба WCF с функцией GetTrackingLink:
[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>
...and after each call to GetTrackingLink, I find in RAFProdTraces2.svclog the following error: System.Xml.XmlException: Encountered unexpected character 'j'.
Я знаю, что это происходит, потому что JSONP отправляет обратный вызов с запросом, который выглядит так:
GET /Service1.svc/GetTrackingLink?callback=jQuery1102024896297114901245_1383152659468&orderID=006-0000001
Таким образом, «j» из «jQuery» заставляет диагностику WCF вызывать исключение (это «j», потому что я заменил его другими повторяющимися символами, а в новых выброшенных исключениях были символы, которые я использовал для замены «j» на ).
Мой вопрос: есть ли способ заставить Диагностику системы правильно анализировать запрос и игнорировать часть «callback=jQuery1102024896297114901245_1383152659468»?
Или есть другой способ избавиться от этого исключения?
Заранее спасибо.