代码改变世界

Silverlight WCF RIA Service也遭遇了一次编码问题

2012-01-14 17:55  slmk  阅读(369)  评论(0编辑  收藏  举报

这是一次血的教训: 足足花了我两个小时来调试这个问题,Silverlight应用在开发机器正常,发布到服务器后就出现了问题。

其实有一个问题浪费了我大部分时间,那就是:Silverlight的Xap缓存问题。刚开始没有注意,以为刷新了就会下载到新的xap文件到浏览器,可是修改了多次程序后,还提示同样的错误,于是删除浏览器临时文件,并通过MessageBox框定位到问题所在:一个DomainService的查询操作总是返回null,这个操作需要一个参数,可这个参数通常是中文!这才恍若大悟,这不是我经常犯的编码问题吗?

马上配置web.config:

<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>

问题终于解决了。

注:服务器上root的web.config居然配置成gb2312了,弄得我三反两次的出莫名奇妙的问题,这可是血的教训啊!

其实,WCF RIA也是通过URL请求来取参数的,IE9下F12可以捕捉到网络请求:

/AppName/ClientBin/AppName-Web-Services-DomainService.svc/binary/GetWWR_Addr?addr=test中文utf-8编码    GET    200    application/msbin1    .53 KB    31 ms        71511    16    15    0    0    437

还是Get请求,只不过类型是application/msbin1,后端WCF的数据通讯和普通的Asp.net很相似。有兴趣的可以看一下SubmitChanges的请求正文,好像是silverlight专有的格式。