2009-02-22 108 views
0

我正在寫一個簡單的web方法,它返回byte [],byte []由UTF-8編碼。我已經調查過相關的WSDL和soap消息,似乎底層web服務棧會使用base64編碼?base64和UTF-8編碼問題

由於各種原因,我無法使用或重新編碼從UTF-8到base64的返回字節[]。任何想法將base64編碼修改爲UTF-8編碼?

這裏是WSDL

Web服務的服務器端代碼

 [WebMethod] 
     public byte[] HelloWorld2() 
     { 
      return utf8encodedbytes; 
     } 

SOAP響應

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <HelloWorld2Response xmlns="http://tempuri.org/"> 
     <HelloWorld2Result>base64Binary</HelloWorld2Result> 
    </HelloWorld2Response> 
    </soap:Body> 
</soap:Envelope> 

相關類型的WSDL

我相關網站的方法,SOAP消息和相關類型
xsd:base64Binary 

在此先感謝, 喬治

回答

9

您的問題並沒有真正意義上的很多恐懼 - 字節數組不用UTF-8的文本編碼編碼。您通常應用UTF-8編碼到文本以獲取字節數組。要用XML傳輸任意字節數組,你應該使用base64。

如果你想轉移文本你應該只返回一個字符串開始。

在任何種類的編碼發生之前,原始數據是什麼?如果它是一個字節數組,則應該返回一個字節數組,並且XML應該自動包含base64編碼的數據。如果是文本,則應返回一個字符串並讓XML處理編碼。

1

那麼是什麼阻止你使用Convert.ToBase64()Convert.FromBase64()?這些功能的確如此:將byte陣列轉換爲base64 string,並且反之亦然。