【发布时间】:2021-06-16 03:00:42
【问题描述】:
我正在尝试使用 System.ServiceModel 命名空间编写一个 .NET IIS Web 服务。我的服务应将传入数据包中的 startTag 节点作为 RAW XML 而不是反序列化的 .NET 类读取,但我似乎做不到。这是一个示例 SOAP 数据包:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:tmk="http://schemas.datacontract.org/2004/07/TMK.Catalog">
<soapenv:Header/>
<soapenv:Body>
<tem:Catalog>
<tem:document>
<tmk:CHRMAS03>
<startTag>
<myTag>
<answer>Hello world!</answer>
</myTag>
</startTag>
</tmk:CHRMAS03>
</tem:document>
</tem:Catalog>
</soapenv:Body>
</soapenv:Envelope>
这是我的网络服务:
using System;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Xml.XPath;
[ServiceContract]
public interface IContract
{
[OperationContract]
string Catalog(Point document);
}
[DataContract]
public class Point
{
[DataMember]
public XPathDocument CHRMAS03;
public Point (XPathDocument document)
{
this.CHRMAS03= document;
}
}
public class Service1 : IContract
{
public string Catalog (Point document)
{
if(document.CHRMAS03!=null)
{
try
{
XPathNavigator navigator = document.CHRMAS03.CreateNavigator();
XPathNodeIterator iterator1 = navigator.Select("startTag/myTag/answer");
if(iterator1==null) {return "crash"; }
int a = iterator1.Count; // Exception!
return "success";
}
catch(Exception e)
{
return e.Message + e.StackTrace;
}
}
return "fail";
}
当我将上面指定的数据包发送到我的网络服务时,这一行:
int a = iterator1.Count
抛出异常:
Object reference not set to an instance of an object.
at MS.Internal.Xml.Cache.XPathDocumentNavigator.get_NameTable()
at MS.Internal.Xml.Cache.XPathDocumentElementChildIterator..ctor(XPathDocumentNavigator parent, String name, String namespaceURI)
at MS.Internal.Xml.Cache.XPathDocumentNavigator.SelectChildren(String name, String namespaceURI)
at MS.Internal.Xml.XPath.ChildrenQuery.Advance()
at MS.Internal.Xml.XPath.ChildrenQuery.Advance()
at MS.Internal.Xml.XPath.ChildrenQuery.Advance()
at MS.Internal.Xml.XPath.Query.MoveNext()
at MS.Internal.Xml.XPath.Query.get_Count()
at TMK.Catalog.Service1.Catalog(Point document)
我应该如何重新定义CHRMAS03 字段,以便将startTag 节点的原始XML 内容作为我可以手动解析的字符串或任何标准.NET 的工作实例 em> 读取XML的类,如XmlReader或XmlNode?
【问题讨论】:
标签: c# xml web-services