相关疑难解决方法(0)

WCF服务参考 - 获取"XmlException:名称不能以'<'字符开头,十六进制值0x3C"在客户端

我有一个智能客户端应用程序通过WCF与其服务器通信.数据在客户端上创建,然后通过服务发送以进行持久化.服务器和客户端通过共享dll使用相同的域类,我在Visual Studio中使用方便的"添加服务引用"功能包装SvcUtil.exe并生成客户端和代理类.

尝试调用服务时出现以下错误:

System.Xml.XmlException occurred
  Message=Name cannot begin with the '<' character, hexadecimal value 0x3C.
  Source=System.Xml
  LineNumber=0
  LinePosition=1
  StackTrace:
       at System.Xml.XmlConvert.VerifyNCName(String name, ExceptionType exceptionType)
  InnerException: 
Run Code Online (Sandbox Code Playgroud)

这特别麻烦,因为该服务一次可以工作数周而不会发生此错误,然后突然且没有警告它将再次出现.我根本无法找出导致它的原因.当它确实发生时,我会深入研究如何解决它,并且通常不会提出任何比实际尝试以编程方式将事物序列化为xml而遇到相同错误的人.我只使用生成的客户端和代理来尝试发送此数据.

我已经查看Service References\AwesomeService了我的解决方案文件夹中生成的代理,看不到任何与众不同的内容.生成的文件中唯一出现的尖括号是:

  • *.svcinfo,Reference.svcmap,AwesomeService.disco,AwesomeService.wsdl和*.xsd文件中的xml标记
  • Reference.cs文件中泛型集合的参数

我用来调用服务的代码是这样的:

using (var client = new AwesomeServiceClient())
{
    client.SaveAwesomeness(instanceOfAwesomeness);
}
Run Code Online (Sandbox Code Playgroud)

这是在上面列出的调用代码上方的第一帧开始的堆栈:

System.Xml.dll!System.Xml.XmlConvert.VerifyNCName(string name, System.Xml.ExceptionType exceptionType) + 0xb5 bytes 
System.Runtime.Serialization.dll!System.Runtime.Serialization.DataContract.IsValidNCName(string name) + 0x27 bytes  
System.Runtime.Serialization.dll!System.Runtime.Serialization.DataContract.EncodeLocalName(string localName) + 0x1d bytes   
System.Runtime.Serialization.dll!System.Runtime.Serialization.ClassDataContract.ClassDataContractCriticalHelper.ImportDataMembers() + 0x2e1 bytes   
System.Runtime.Serialization.dll!System.Runtime.Serialization.ClassDataContract.ClassDataContractCriticalHelper.ClassDataContractCriticalHelper(System.Type type) + 0x10d bytes 
System.Runtime.Serialization.dll!System.Runtime.Serialization.DataContract.DataContractCriticalHelper.CreateDataContract(int id, System.RuntimeTypeHandle typeHandle, System.Type type) + 0x198 bytes   
System.Runtime.Serialization.dll!System.Runtime.Serialization.DataContract.DataContractCriticalHelper.GetDataContractSkipValidation(int id, …
Run Code Online (Sandbox Code Playgroud)

.net c# wcf serialization datacontractserializer

24
推荐指数
2
解决办法
2万
查看次数

标签 统计

.net ×1

c# ×1

datacontractserializer ×1

serialization ×1

wcf ×1