我正在编写一个返回byte []的简单Web方法,而byte []由UTF-8编码。我已经调查了相关的WSDL和soap消息,似乎底层的Web服务堆栈将使用base64编码?
由于各种原因,我无法使用或重新编码从UTF-8到base64的返回字节[]。有什么想法将base64编码修改为UTF-8编码吗?
这是我在WSDL中的相关Web方法,SOAP消息和相关类型
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中的相关类型
xsd:base64Binary
提前谢谢,
乔治
答案 0 :(得分:9)
我担心你的问题并没有多大意义 - 字节数组不是用UTF-8等文本编码编码的。您通常将UTF-8编码应用于 text 以获取字节数组。要以XML格式传输任意字节数组,您应该使用base64。
如果您想传输文本,您应该只返回一个字符串以开始。
在进行任何编码之前,原始数据是什么?如果它是一个字节数组,则应该返回一个字节数组,XML应该自动包含base64编码的数据。如果是文本,则应返回一个字符串,让XML处理编码。
答案 1 :(得分:1)
那么是什么阻止您使用Convert.ToBase64()
和Convert.FromBase64()
?这些函数完全相同:将byte
数组转换为base64 string
s,反之亦然。