微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight 2 升级Beta2 问题整理

问题1 WebService引用失败:

 

这几天刚下载并安装了Siverlight2.0 Beta 2.0,但经过简单试用后发现存在一个普遍的问题,就是在添加service reference的时候,在弹出的‘Add Service Reference’对话框里点击discover时无法自动找到本项目的Web Service,若手工将web service地址 输入后,会出现‘Object reference not set to an instance of an object’这样的错误

若你也遇到了同样的情况,请先去‘添加/删除软件’里看下Silverlight 2 Beta 2 Tools的安装体积,正常的是1.18M,如果你的是1.4M,那么极有可能是安装问题。有可能你安装了去年12月发布的Blend等软件。

在Silverlight.net论坛找到一种可行的解决办法:

  1):确定所有与Silverlight相关的应用程序都被卸载

  2):删除以下DLL:
C:/Program Files/Microsoft Visual Studio 9.0/Common7/IDE/Microsoft.VisualStudio.ServicesProxy.dll

以上步骤全部完成后,安装Silverlight 2 Beta 2。问题就解决了。

 

问题2 WCF引用失败:

 

今天把silverlight2 beta2版本装上了,发现以前在beta1下写的一个程序wcf引用失效,于是就想把wcf引用重新添加一次,结果弹出对话框显示"Object reference not set to an instance of an object".为了测试问题的原因,又新建了一个Silverlight Application添加wcf引用,仍然提示这个错误,并且vs.net2008在退出的时候老是提示出现问题提示重新启动。于是google了一下,找到了解决方法。总结如下:

症状:
1.当添加WCF服务引用的时候出现错误 “Object reference not set to an instance of an object”
2.Silverlight app 不能发现同一个解决方案下的 WCF services
3.添加wcf服务的时候,点击advanced按钮时出现错误“Unable to find ‘DynamicTypeService’” 
4.Visual Studio退出时死掉,并且提示重新启动vs studio

解决方法
1.在Tools – Options – Source Control – Plug-in Selector下将源代码管理插件设置为None
2.删除文件/Program Files/Microsoft Visual Studio 9.0/Common7/IDE/Microsoft.VisualStudio.ServicesProxy.dll
3.卸载 Microsoft Silverlight Tools Beta 2 for Visual Studio 2008. 并且重新安装
这样Microsoft.VisualStudio.ServicesProxy.dll被更新为新的版本。

打开vs.net2008问题解决

 

问题3 服务跨域问题:

 

今天将silverlight2 beta1的程序转换成silverlight2 beta2的程序后,发现以前的wcf无法正常调用,vs.net2008 的提示如下:
"An exception of type 'System.ServiceModel.ProtocolException' occurred in System.ServiceModel.dll but was not handled in user code
Additional @R_120_4045@ion: The Remote Server returned an unexpected response: (404) Not Found."
当直接在网页中输入.svc文件的连接地址的时候发现服务是可用的,于是怀疑是客户端跨域访问策略文件(clientaccesspolicy.xml )产生的问题,查了下资料,原来是在beta2版本中,策略文件的写法有所改变

Cross-domain restrictions still apply within beta 2 and the same rules apply.  There is one subtle change that is required to your clientaccesspolicy.xml file that is required.  In the allow-from node of the policy file,the attribute http-request-headers is Now required.  If your service is an open/public one then specifying “*” is probably acceptable (you’ll have to be the judge of that.  If you only wanted to allow specific headers (besides the blacklisted ones) you can provide those in a comma-separated list and can use wildcards as well.  For example you Could use X-MyApp-* if you wanted.

Another thing to note about the support for Adobe’s crossdomain.xml policy file is one thing we found in interpretation of the policy template.  PrevIoUsly Flash was a Macromedia product and as such that file is adorned with a DOCTYPE that represents a schema with macromedia in it.  Well,Adobe has changed the schema a little bit and also updated the DOCTYPE to reflect Adobe as the authority.  Right Now,Silverlight still expects to validate the macromedia declaration.

于是将clientaccesspolicy.xml 的内容修改成如下

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

保存修改,重新编译了一下wcf service,在silverlight 的客户端程序中更新对wcf service的引用,运行成功

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐