【发布时间】:2016-05-18 17:14:58
【问题描述】:
我需要将 XML 作为字符串发送到我使用 ASP.Net 开发的 Web 服务。
为此,我将需要发送的 xml 编码为 web 服务的参数(字符串),然后在 web 服务业务逻辑中将其解码。
网络服务例如:
[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 ) ;
}
这里是完整的编码 XMLPayload 数据:
<?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>
如果我尝试从我的 C# 客户端调用我的 web 服务(webmethod WebService_DoWork),我会收到我发送的确切有效负载(仍然编码)并且一切正常。
如果我尝试使用 Postman、SoapUI 或其他客户端,我会得到一个在 webmethod 中接收时刚刚解码的有效负载(并且双重解码可能有问题)。
这是我与 SoapUI 或 Postman 一起使用的肥皂请求示例:
<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 会自动对其进行解码?
【问题讨论】:
标签: c# asp.net web-services soap