2016-05-18 20 views
0

私は私はASP.Netで開発したWebサービスに文字列としてXMLを送信する必要があります。 ASP.NetのWebサービス自動エンコード・デコード

は私がwebserivceのパラメータ(文字列)として送信する必要があり、その後、私は、Webサービスのビジネスロジックに戻ってそれをデコードし、XMLをエンコードすることができません。



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=&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> 


私は私のC#クライアントそれから(WebMethod属性WebService_DoWork)私のWebサービスを呼び出すようにしようとすると、私は私が送っていることを正確にペイロード(まだエンコードされた)を受信し、すべてが正しいです。

私はポストマン、SOAPUIまたは他のクライアントにしようとすると、私はWebメソッドでそれを受信したときだけデコードされ(とduble復号化が問題となり得る)ペイロードを取得します。ここで

は私がSOAPUIやポストマンと一緒に使用するSOAPリクエストの例である:

<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

私の知る限りSOAPペイロードので、私の明示的なデコードが冗長である、asp.netのWebサービスと(WSDLから生成された)Visual Studioのクライアントが自動的にペイロードをエンコード・デコードするようだ私が見るもの、エンコードする必要があります – Skary

関連する問題