2014-11-01 40 views
0

我想從soap標題和SOAP正文中讀取元素值。請查看下面的代碼,並幫助我獲取custid和clientid表單標題和正文。如果您需要任何進一步澄清讀取SOAP標題和正文元素

<?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> 

+0

你在擺弄一個SOAP消息的XML,而不是使用工具包(Web服務)的對象模型的任何原因? – 2014-11-01 09:40:32

+0

這是我以這種格式從客戶端獲得的請求。我沒有任何其他選擇 – Uttam 2014-11-01 09:43:15

+1

當然,您可以選擇如何使用SOAP消息。您可以使用X(ml)文檔並採用硬核方式,您可以使用WCF通道/服務層,您可以使用XmlSerializer,DataContractSerializer,SoapFormatter。這麼多選擇。爲什麼客戶首先向你發送SOAP?網頁服務!使用WebServices工具箱! (WCF或WebAPI for Asp.Net) – 2014-11-01 09:46:05

回答

0
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; 

        } 
       } 
0

我發現,簡單的方法,這樣做後我。只需從httprequest讀取inputstream,加載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;