【发布时间】:2013-11-28 15:55:21
【问题描述】:
我有如下所示的肥皂消息。我只想获取请求元素及其子节点。
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://location.xsd">
<soap:Header xmlns="http://www.server.net/schema/request.xsd">
</soap:Header>
<soap:Body>
<Request ReqRespVersion="large" Version="1" EchoToken="1.0" xmlns="http://mynamespace.com">
.....
</Request>
</soap:Body>
</soap:Envelope>
我可以使用此代码获取它。
Dim myXDocument As XDocument = XDocument.Load(New StringReader(Request))
Dim Xns As XNamespace = XNamespace.Get("http://mynamespace.com")
SoapBody = myXDocument.Descendants(Xns + "Request").First().ToString
但我不想使用像“请求”这样的特定名称,因为我有多个肥皂消息,并且每个消息都有不同的 xml 元素名称。所以我需要一个通用函数,而不是为每个函数创建一个特定函数。
我遵循了这个建议:Extract SOAP body from a SOAP message
但是使用下面的这段代码,但它对我不起作用。我在哪里做错了,或者我如何在身体部位提取?
Dim myXDocument As XDocument = XDocument.Load(New StringReader(Request))
Dim Xns As XNamespace = XNamespace.Get("soap="http://www.w3.org/2003/05/soap-envelope")
SoapBody = myXDocument.Descendants(Xns + "Body").First().ToString
【问题讨论】:
-
您手动执行此操作是否有原因?您没有编写 WCF 服务或客户端的原因是什么?
-
@john:确实我的服务是 wcf 并且我已经发布了获取对象和返回对象的操作。我的客户告诉我他想发送字符串,这个字符串周围有肥皂信封,包括标题和正文作为我的例子。对我来说,为了再次将其反序列化为对象,我只需要提取请求部分。确实,我是 wcf 的新手,但我认为 wcf 会自动添加肥皂信封,不是吗?当我与提琴手核对时,我可以看到请求已经和我的示例一样,我不知道我是否应该告诉我的客户他们不需要发送肥皂标签。我对 wcf 的理解正确吗?
-
很明显,您和您的客户没有进行交流。是的,你当然应该告诉你的客户!
标签: xml vb.net linq-to-xml