wcf端:
[OperationContract]
[WebInvoke(Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
Stream GetList(SomeObject dto);
web.config:
<service behaviorConfiguration="ProductBehavior" name="ProductService">
<endpoint address="" behaviorConfiguration="ProductBehavior" binding="webHttpBinding" bindingConfiguration="" contract="IProduct">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
然后具体的转化为stream是这样:
MemoryStream stream = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(type);
ser.WriteObject(stream, list);
string tmpStr = System.Text.Encoding.UTF8.GetString(stream.ToArray());
Stream rtnStream = new MemoryStream(Encoding.UTF8.GetBytes(tmpStr));
return rtnStream;
服务端是这样,客户端也是正常接收的,我用HttpPost测试然后用:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
res = reader.ReadToEnd();
reader.Close();
也可以的,ipad可以正常访问,iphone和android却显示中文乱码,其他错误没有,iphone和ipad是同一个代码,iphone和andriod都是用string接收返回值,不知道是不是这个问题,我不懂客户端,只能想服务器端有什么错误?难道stream返回的时候又被转码了吗?在线等!
------解决方案--------------------
感觉返回Stream怪怪的,直接返回String应更简单可靠。
------解决方案--------------------
textEncoding="utf-8"两个要做到编码格式的统一
------解决方案--------------------
------解决方案--------------------
textEncoding="utf-8"两个要做到编码格式的统一
也试过了,还是不行,最后回滚了~谢谢。
因为我不懂android和iphone,而且同事也不愿意帮我搭建环境(他们好不耐烦~),所以只好不了了之~