Мне нужно отправить 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=".." ;
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>
<?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>
</tem:xml>
</tem:WebService_DoWork>
</soapenv:Body>
</soapenv:Envelope>
Так что я хотел бы знать, почему из этого странного поведения, может быть то, что C# клиент закодировать его снова (под капот), потому что ASP.Net автоматически декодирует его?
AFAIK Мыло полезной нагрузки, что я вижу, кажется, что asp.net веб-сервис и Visual Studio клиент (генерируется из WSDL) автоматически кодировать-декодировать полезную нагрузку, так что мое явное декодирование является излишним – Skary