【问题标题】:Reading SOAP Header and Body elements读取 SOAP Header 和 Body 元素
【发布时间】:2014-11-10 20:24:19
【问题描述】:

我想从 soap header 和 SOAP Body 中读取元素值。请查看下面的代码并帮助我获取 custid 和 clientid 表单标题和正文。如果您需要任何进一步的说明,请发帖给我

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Header>
   <APHeader xmlns="http://www.test.com/es/v1/ws">
    <usr>
    <Verb>Set</Verb>
    <Noun>ProcessEIACMPermissions</Noun>
    <DataVer>001:000</DataVer>
    <SrcAppID xsi:type="xsd:string">AP</SrcAppID>
    <CustID>30081241</CustID>
    <APMsgCorrelationID>00000000000000000000000000000000</APMsgCorrelationID>
    </usr>
  </APHeader>
  </soap:Header>
  <soap:Body>
    <ProcessEIACMPermissionsRequest      xmlns="http://www.adp.com/es/ezlm/v1/schema/tlmclientconfiguration">
    <ClientID>30081241</ClientID>
  </ProcessEIACMPermissionsRequest>
 </soap:Body>

【问题讨论】:

  • 您有什么理由在 SOAP 消息的 XML 中摆弄而不是使用工具包 (WebServices) 的对象模型?
  • 这是我从客户端收到的这种格式的请求。我别无选择
  • 当然,您可以选择如何使用 SOAP 消息。您可以使用 X(ml)Document 并采用硬核方式,可以使用 WCF 通道/服务层,可以使用 XmlSerializer、DataContractSerializer、SoapFormatter。这么多选择。为什么客户端首先向您发送 SOAP?网页服务!使用 WebServices 工具包! (用于 Asp.Net 的 WCF 或 WebAPI)
  • 感谢马文的建议。您能帮我了解我可以使用哪种最简单的方法来读取 SOAP 标头和 Body 元素,例如 custID 值 Client ID 值。请根据我发送的上述文件发送一些示例。
  • 设置一个 web 服务(我会选择 WCF),它接受来自客户的消息类型(暴露一个端点),然后使用 WS 实现中的对象模型来访问消息的属性(伪:Msg.Headers[x].ClientID)

标签: c# soap


【解决方案1】:

我找到了这样做的简单方法。只需从 httprequest 读取输入流,加载 xml 并从 xml 获取 CustID。以下是相同的代码。

 var httpApp = sender as HttpApplication;
            var Request = httpApp.Request as HttpRequest;
            string documentContents;
            using (Stream receiveStream = Request.InputStream)
            {
                using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
                {
                    documentContents = readStream.ReadToEnd();
                }
            }            
            XmlDocument xd = new XmlDocument();
            xd.LoadXml(documentContents);
            XmlElement root = xd.DocumentElement;
            XmlNodeList titleList = root.GetElementsByTagName("CustID");
            return titleList[0].InnerText;         

【讨论】:

    【解决方案2】:
    case SoapMessageStage.BeforeSerialize:
                    break;
                case SoapMessageStage.AfterSerialize:
    
                    break;
                case SoapMessageStage.BeforeDeserialize:
                    break;
                case SoapMessageStage.AfterDeserialize:
                    foreach (SoapHeader header in message.Headers)
                    {
                        if (header.GetType() == typeof(RouteInformation))
                        {
                            routeHdr = (RouteInformation) header;
                            if(!string.IsNullOrEmpty(routeHdr.ConsumerID))
                                id = DataFix.FixInt(routeHdr.ID);
                        }
                        else if (header.GetType() == typeof (Header))
                        {
                            Hdr = (Header) header;
                            Custid = DataFix.FixInt(Hdr.m_objUsr.ID);
    
                        }
                        else if(header.GetType() == typeof(Configuration))
                        {
                            configHdr = (ConfigurationAPHeader) header;
    
                        }
                    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      相关资源
      最近更新 更多