我正在尝试在桌面.net应用程序中运行Web服务的方法,但在描述其XML结果时遇到问题。当我运行提到的方法编译器抛出此错误:
从网络收到的XML存在问题。 有关详细信息,请参阅内部异常。
Web服务托管在Apache服务器上,并使用PHP编写。 有一个客户端示例可以成功运行该方法。结果XML如下:
<?xml version="1.0" encoding="UTF-8" ?>
<ServicesList>
<Service>
<token>11838-78</token>
<coName>test</coName>
</Service>
</ServicesList>
这是内部异常的一部分,其中说:“根级别的数据无效”
Message=The data at the root level is invalid. Line 1, position 1.
Source=System.Runtime.Serialization
LineNumber=0
LinePosition=0
StackTrace:
at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)
at System.Xml.XmlUTF8TextReader.Read()
at System.Xml.XmlBaseReader.IsStartElement()
at System.Xml.XmlBaseReader.IsStartElement(XmlDictionaryString localName, XmlDictionaryString namespaceUri)
at System.ServiceModel.Channels.ReceivedMessage.ReadStartEnvelope(XmlDictionaryReader reader)
at System.ServiceModel.Channels.BufferedMessage..ctor(IBufferedMessageData messageData, RecycledMessageState recycledMessageState, Boolean[] understoodHeaders, Boolean understoodHeadersModified)
at System.ServiceModel.Channels.TextMessageEncoderFactory.TextMessageEncoder.ReadMessage(ArraySegment`1 buffer, BufferManager bufferManager, String contentType)
at System.ServiceModel.Channels.MessageEncoder.ReadMessage(Stream stream, BufferManager bufferManager, Int32 maxBufferSize, String contentType)
at System.ServiceModel.Channels.HttpInput.ReadChunkedBufferedMessage(Stream inputStream)
InnerException:
我花了很多时间在谷歌上找出问题所在。并且发现可能结果XML以BOM(字节顺序标记)开始,导致XMLReader抛出异常。
最后我在这里调用方法:
mywebservice.wsobjectDLPortTypeClient mys = new mywebservice.wsobjectDLPortTypeClient();
try
{
string res;
// mys.Open();
res = mys.srvReq(sourcecode, destinationcode, date, time, count);
catch (Exception e)
{
//do something
}
任何人都知道是什么导致这个问题以及我如何解决它?