SoapException:当从Flex调用.NET Web服务时,缺少根元素

时间:2020-03-05 18:40:11  来源:igfitidea点击:

我有一个.net Web应用程序,该应用程序在页面中嵌入了Flex应用程序。该Flex应用程序称为.net Web服务。我可以通过调试器跟踪执行过程,在得到响应之前,一切看起来都很不错:

soap:ReceiverSystem.Web.Services.Protocols.SoapException: Server was unable to process request

. ---> System.Xml.XmlException: Root element is missing.

   at System.Xml.XmlTextReaderImpl.Throw(Exception e)

   at System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res)

   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()

   at System.Xml.XmlTextReaderImpl.Read()

   at System.Xml.XmlTextReader.Read()

   at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read()

   at System.Xml.XmlReader.MoveToContent()

   at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.MoveToContent()

   at System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement()

   at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()

   at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)

   at System.Web.Services.Protocols.SoapServerProtocol.Initialize()

   at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest

 request, HttpResponse response, Boolean& abortProcessing)

   --- End of inner exception stack trace ---

来自flex的调用看起来不错,通过Web服务的执行效果很好,但这是我通过Wireshark捕获的响应,这是怎么回事?

我已经尝试了几种网络方法,从" Hello World"到参数化方法...都以相同的响应复出...

我认为这可能与" --->"编码有关,但我不确定如何控制.net呈现为响应。

解决方案

回答

看来我们可能正在向服务发送格式不正确的XML文档。我们可以使用Fiddler或者类似的方法来获取将要发送到Web服务的实际呼叫的副本吗?这将有助于找出问题所在。

回答

我们在使用Flex 3吗?如果是这样,我们可以在执行Web服务时设置一个断点,并在对请求进行编码时实际遍历Flex框架。查看mx.rpc.soap.SoapEncoder,我们将能够确切地看到将通过网络发送的内容。

回答

我最近使用了.NET REST接口,该接口是通过Flex应用程序使用的。我也遇到了一些奇怪的异常,我的问题是我在发送请求时忘记了将XML元素(名称空间)包含在根元素中。这是一个疯狂的猜测,但我希望它会有所帮助。