我在C#控制台应用程序中使用WCF服务时遇到问题。
这是我用来使用该服务的代码。
WCFServiceReference.WCFInterfaceClient client = new WCFInterfaceClient(); try { WCFInterface x = client.WCFInterface(); } catch (Exception ex) { Console.WriteLine(ex); }
WCF接口代码
public interface WCFInterface { [OperationContract] WCFInterface WCFInterface(); } [DataContract] public class WCFInterface { [DataMember] public string URI1 = ""; [DataMember] public string URI2 = ""; [DataMember] public string URI3 = ""; }
然后在服务中生成以下错误。
"解析值时遇到意外的字符:<。路径'',第0行,第0位。"
例外明细:
{ExceptionDetail,可能由IncludeExceptionDetailInFaults = true创建,其值为:
Newtonsoft.Json.JsonReaderException:解析值时遇到意外的字符:
&LT ;.路径'',第0行,第0位。
at Newtonsoft.Json.JsonTextReader.ParseValue()
在Newtonsoft.Json.JsonTextReader.ReadInternal()
在Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader,JsonContract contract,Boolean hasConverter)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader,Type objectType,Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader,Type objectType)
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value,Type type,JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject [T](String value,JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject [T](String value)
我可以看到错误是在我的服务中产生的,我遇到的问题是我不知道为什么会被触发。
当我运行该服务并使用Visual Studio中的Test Client手动调用它时,不会产生任何错误并且该过程成功完成。
答案 0 :(得分:3)
我会猜测并说你的内容不是JSON,而是HTML或XML / SOAP,给定<字符在0,0?你能确认一下响应格式是什么吗?
您是否在创建客户端存根后更改了服务的响应格式?
根据您的服务类型,项目类型和.NET框架版本,您可以通过以下几种方式完成此任务。
尝试使用WebInvoke属性将RequestFormat硬编码为JSON:
[WebInvoke(Method = "GET",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
您还可以使您的服务自动检测并支持JSON和SOAP:
然而,对我来说,这不是一个解决方案,只是一个健全性检查。
真正的问题是,为什么在部署时会发生变化?
部署时格式发生变化的事实告诉我,环境配置不同,或者您没有针对开发服务测试控制台应用程序。在您提出的问题中,您说您正在使用Visual Studio测试客户端。尝试针对localhost的控制台应用。另外,您是部署了web.config还是在已存在的web.config下运行?您是否检查过是否存在差异?
答案 1 :(得分:0)
我最终搞清楚发生了什么事。
我的控制台应用程序正在调用WCF服务,而该服务又消耗了一个web api。
web api以一种不是我的WCF服务所期望的格式返回错误消息。
通过以下回答,我能够解决我的问题,我知道它与我原来的问题看起来非常不同,但这就是我的控制台应用程序收到的内容。通过跟踪错误,我能够确定错误实际上是由我的WCF服务生成的,直到那时才能正常工作。