我有一个智能客户端应用程序通过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了我的解决方案文件夹中生成的代理,看不到任何与众不同的内容.生成的文件中唯一出现的尖括号是:
我用来调用服务的代码是这样的:
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)