【发布时间】:2010-10-10 00:36:00
【问题描述】:
我使用以下代码调用 wcf 服务。如果我调用一个不带参数但返回一个字符串的(测试)方法,它工作正常。如果我在我的方法中添加一个参数,我会得到一个奇怪的错误:
{"ExceptionDetail":{"HelpLink":null,"InnerException":null,"Message":"令牌 '\"' 是预期的,但在系统中找到了 '''。","StackTrace":" Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader 阅读器,字符串 res,String arg1,String arg2,String arg3)\u000d\u000a 在 System.Xml.XmlExceptionHelper.ThrowTokenExpected(XmlDictionaryReader 阅读器,预期字符串,找到字符)\u000d\u000a 在系统。 Runtime.Serialization.Json.XmlJsonReader.ParseStartElement()\u000d\u000a 在 System.Runtime.Serialization.Json.XmlJsonReader.Read()\u000d\u000a 在 System.ServiceModel.Dispatcher.DataContractJsonSerializerOperationFormatter.DeserializeBodyCore(XmlDictionaryReader reader, Object[]参数,布尔 isRequest)\u000d\u000a 在 System.ServiceModel.Dispatcher.DataContractJsonSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader 阅读器,MessageVersion 版本,字符串操作,MessageDescription messageDescription,Object[] 参数,布尔 isRequest)\u000d\u000a 在 System.ServiceMode l.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)\u000d\u000a at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters)\u000d\u000a at System.ServiceModel .Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(Message message, Object[] parameters)\u000d\u000a at System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(Message message, Object[] parameters)\u000d\u000a at System.ServiceModel.Dispatcher.CompositeDispatchFormatter .DeserializeRequest(Message message, Object[] parameters)\u000d\u000a at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc)\u000d\u000a at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)\u000d\ u000a 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)\u000d\u000a 在 System.ServiceModel.Dispatcher.Immut ableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)\u000d\u000a 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)\u000d\u000a 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)\u000d\u000a 在 System. ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)\u000d\u000a at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)","Type":"System.Xml.XmlException"},"ExceptionType":"System .Xml.XmlException","Message":"令牌 '\"' 是预期的,但找到了 '''。","StackTrace":" 在 System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1,字符串 arg2,字符串 arg3)\u000d\u000a 在 System.Xml.XmlExceptionHelper.ThrowTokenExpected(XmlDictionaryReader 阅读器,预期字符串,找到字符)\u000d\u000a 在 System.Runtime.Serialization.Json.XmlJsonReader.ParseStartElement()\u000d\u000a在 System.Runtime.Serialization.Json.XmlJsonRe ader.Read()\u000d\u000a at System.ServiceModel.Dispatcher.DataContractJsonSerializerOperationFormatter.DeserializeBodyCore(XmlDictionaryReader reader, Object[] parameters, Boolean isRequest)\u000d\u000a at System.ServiceModel.Dispatcher.DataContractJsonSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion版本,字符串操作,MessageDescription messageDescription,Object[] 参数,Boolean isRequest)\u000d\u000a at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)\u000d\u000a at System.ServiceModel .Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters)\u000d\u000a at System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(Message message, Object[] parameters)\u000d\u000a at System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter .DeserializeRequest(Message message, Object[] 参数)\u000d\u000a at System.ServiceModel.Dispatcher.CompositeDispatchFormatter.DeserializeRequest(Message message, Object[] parameters)\u000d\u000a at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc)\u000d\u000a at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc& rpc)\u000d\u000a 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)\u000d\u000a 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)\u000d\u000a 在 System.ServiceModel.Dispatcher .ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)\u000d\u000a 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)\u000d\u000a 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)\u000d\u000a 在 System .ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)"}
我的 jquery 看起来像这样,但我尝试将我作为字符串序列化 json(如您所见)发送的实际数据更改为具有相同悲伤结果的纯 json 对象。
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "ajax/Statistics.svc/Get7DaysStatistics",
dataType: "json",
data: "{'customerId': '2'}",
timeout: 10000,
success: function(obj) { updateStatistics(obj.d); },
error: function(xhr) {
if (xhr.responseText)
$("body").html(xhr.responseText);
else
alert('unknown error');
return;
}
});
wcf 服务如下所示:
[SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic"), OperationContract]
public string Get7DaysStatistics(string customerId)
{
Debug.WriteLine(customerId);
return "Test done";
}
它被放置在一个具有以下属性的类中:
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
我不会在 web.config 中列出配置以保持这条长消息“简短”,但如果有人认为他们可以使用它,我可以发布它 - 我只是想强调我可以调用一个方法并获得一个结果 - 只要我不将任何数据传递给 wcf 服务,我就可以读取字符串甚至 json 对象。
【问题讨论】: