这是一次血的教训: 足足花了我两个小时来调试这个问题,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专有的格式。