2016-05-18 3 views
0

Мне нужно отправить XML как строку в веб-сервис, который я разработал с помощью ASP.Net.ASP.Net WebService automatic Encoding-Decoding

Чтобы сделать это, я закодирую xml, который мне нужно отправить как параметр (строка) webserivce, а затем я его декодирую в бизнес-логике webservice.



Webservice Например:

[WebMethod] 
    public void WebService_DoWork (string xml) 
    { 
     try 
     { 
      MyBo bo = new MyBo (HttpUtility.HtmlDecode (xml)) ; 
      bo.DoWork() ; 
     } 
     catch (Exception err) 
     { 
      //Logging Here 
     } 
    } 

C# Клиент Например:

public void CallMethod() 
{ 
    string encodedXMLPayload = @"<?xml version=&quot.." ; 

    WebService client = new WebService() ; 
    client.Url = @"http:\\myTestServer:port\WebService.asmx" ; 

    client.WebService_DoWork (encodedXMLPayload) ; 
} 

Здесь полные encodedXMLPayload Данные:

<?xml version="1.0" encoding="utf-8"?> 
    <RawTransactionsByAllocCode> 
     <ReportData> 
      <Costcenter>849001</Costcenter> 
      <TransactionID>261246195</TransactionID> 
      <TimeStamp>28/01/2016 10:15:39 PM</TimeStamp> 
      <TransType>Take</TransType> 
      <ProductName>Test Product</ProductName> 
      <SuppliersPartNo>52796843</SuppliersPartNo> 
      <Quantity>5</Quantity> 
      <MaterialNumber>17096239</MaterialNumber> 
      <DeliveryNoteNumber></DeliveryNoteNumber> 
      <PurchaseOrderReference /> 
     </ReportData> 
    </RawTransactionsByAllocCode> 


Если я пытаюсь вызвать мой WebService (WebMethod WebService_DoWork) от моего клиента C#, я получить точно полезную нагрузку (до сих пор), закодированный, что я отправлять и все правильно.

Если я пытаюсь использовать Postman, SoapUI или другой клиент, я получаю полезную нагрузку, которая просто расшифровывается, когда я получаю ее в web-методе (и может быть проблематичным декодирование в разрешении).

Вот пример запроса на мыло, что я использую с SoapUI или Почтальон:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <tem:WebService_DoWork> 
      <tem:xml> 
       &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; 
        &lt;RawTransactionsByAllocCode&gt; 
         &lt;ReportData&gt; 
          &lt;Costcenter&gt;849001&lt;/Costcenter&gt; 
          &lt;TransactionID&gt;261246195&lt;/TransactionID&gt; 
          &lt;TimeStamp&gt;28/01/2016 10:15:39 PM&lt;/TimeStamp&gt; 
          &lt;TransType&gt;Take&lt;/TransType&gt; 
          &lt;ProductName&gt;Test Product&lt;/ProductName&gt; 
          &lt;SuppliersPartNo&gt;52796843&lt;/SuppliersPartNo&gt; 
          &lt;Quantity&gt;5&lt;/Quantity&gt; 
          &lt;MaterialNumber&gt;17096239&lt;/MaterialNumber&gt; 
          &lt;DeliveryNoteNumber&gt;&lt;/DeliveryNoteNumber&gt; 
          &lt;PurchaseOrderReference /&gt; 
         &lt;/ReportData&gt; 
        &lt;/RawTransactionsByAllocCode&gt; 
      </tem:xml> 
     </tem:WebService_DoWork> 
    </soapenv:Body> 
</soapenv:Envelope> 

Так что я хотел бы знать, почему из этого странного поведения, может быть то, что C# клиент закодировать его снова (под капот), потому что ASP.Net автоматически декодирует его?

ответ

-1

XML-теги не кодируются. Необходимо кодировать только текст между тегами XML. Используйте фактическое значение больше и меньше символов <> и котировки ". Когда вы пишете тег XML. Вам нужно только закодировать «значения» тегов XML, как это. должна быть закодирована

<?xml version="1.0" encoding="utf-8"?> 
<RootElement> 
    <ChildElement> 
     I need to encode quotes &quote; and less than/greater than symbols &lt; &gt; because this is not in a tag 
    </ChildElement> 
    <ChildElement> 
     <DeeperChildElement some-attribute="these quotes aren't encoded"> 
      Special Characters here need to be encoded 
     </DeeperChildElement> 
    </ChildElement> 
</RootElement> 
+0

AFAIK Мыло полезной нагрузки, что я вижу, кажется, что asp.net веб-сервис и Visual Studio клиент (генерируется из WSDL) автоматически кодировать-декодировать полезную нагрузку, так что мое явное декодирование является излишним – Skary