关于Silverlight调用WCFRest的异常
- 格式:docx
- 大小:259.80 KB
- 文档页数:5
Silverlight 系列课程39讲 Silverlight 调试、错误处理和 调试 错误处理和 异常苏鹏 MVP MSDN 特约讲师下载Webcast好帮手iR iReaper文件大小<=2.5Mb 可按照多种分类方式进行批量下载WMV、MP3、MP4、Zune四种格式Webcast访问iReaper主页: /iReaper h d l i加速企业解决方案部署尽在资源和利益• 用于解决方案开发的集中资源 用于解决方案开发的集中资源:资源包括指向测试工具、开发 资源包括指向测试工具 开发 人员 SDK、技术论坛、联机培训等的链接,微软全球技术支持中 心( (GTSC) )的邮件技术支持。
• 对市场调查的访问权限:您可以使用这些宝贵信息来识别您当 前的客户或未来客户的特定需求。
• 认证徽标计划:该徽标可以向客户证明您所具有的优秀技术。
• 市场营销和销售支持 h OMetro – ISV领航计划最先应用微软最新技术 提升ISV 提升 ISV竞争优势和商业价值 竞争优势和商业价值• Metro 提供了结构化的支持来帮助ISV进行新技术的评估和 部署 部署: Discover – 参与前沿技术培训 – 评估最新的微软技术及产品 Release Learn – 获取微软Beta版产品的技术支持 – 联络全球开发人员和架构师社区 – 与世界级的商务和技术社区分享最先 Develop 部署的经验点击添加MSN机器人小新 为您收听下载MSDN中文网络广播课程加油助力!收听本次课程需具备的条件• 了解 解SilverLight应用基础 应 础 • 了解.NET NET 的错误处理基本原理Level 200内容介绍• • • • 调试概括 试 括 错误处理 处理和引发异常 总结Level 300调试概述• 讨论 Silverlight Tools for Visual Studio 2008 可帮 调试 Silverlight g 的应 的应用程 程 ,它可帮助您调试基于 序。
1.调试WCF相关问题的一般步骤是什么?2.如何使得Silverlight和HTML元素之间进行交互?2.1. 如何从JavaScript调用中可脚本化的方法?2.2. 如何从代码后置调用客户端JavaScript函数?2.3. 如何从代码后置访问HTML元素?3.如何在Visual Studio中调试带有Silverlight 功能的网站中的JavaScript代码?4.如何处理 Out-Of-Browser 相关问题?4.1. 如何检测应用程序是否工作在OOB( Out-Of-Browser)模式?4.2. 如何检测OOB更新?4.3. 如何将HTML元素融入Silverlight应用程序?4.4. OOB模式下如何调用JavaScript访问HTML 元素?4.5. 在Silverlight中如何访问cookie?5.如何调试OOB应用程序?6.在OOB模式下如何得到网络状况?7. 如何将XAML转换为图像?8. 如何使用Perspective 3D?9. 何时并如何使用Isolate Storage?10. 如何使同一页面的2个Silverlight应用程序交互?11. 如何指定安装界面?12. 什么是Element Binding?13. 什么是Binary Xml?14. Silverlight应用程序如何相互交互?15. Silverlight中如何访问本地字体?16. 什么是 Silverlight 导航应用程序(Navigation Application)?========================================== =====================1.调试WCF相关问题的一般步骤是什么?默认情况下,Silverlight使用浏览器HTTP栈。
这种情况下,如果WCF发生了一个错误,它会发送HTTP 404响应码,错误详细信息并不能在Silverlight客户端中被访问到。
解决Silverlight无法调试的问题解决Silverlight无法调试的问题本文来自Kevin Yang博客整理:Kevin Yang问题描述在Silverlight开发过程中,经常时不时的会碰到Silverlight无法调试的问题。
我就遇到下面几种情况:1. Web Application+Silverlight,F5进入调试状态之后无法跟进Silverlight程序中下的断点2. 项目中有两个Silverlight工程,其中一个Silverlight程序中有一个鼠标点击事件会将当前页面导航到另外一个Silverlight程序的承载页面。
第一个Silverlight程序断点正常,但是第二个Silverlight程序中的断点不能自动停下来3. 无论是在TestPage模式下调试还是在Web工程上调试,只要打开了Silverlight调试开关,那么启动的时候会提示“Unable to start debugging. Cannot locate Microsoft Internet Explorer”。
如果你是直接Ctrl+F5运行,有时候也会出现一样的问题。
单个Silverlight工程无法调试对于第一个问题,请检查如下设置是否正确:1. 确认启用了Silverlight调试。
双击工程中的属性文件夹打开属性设置页,找到Web一栏,在此页卡的最下面有几个调试选项,如下图所示:确认最后一项“Silverlight”之前的勾是勾上的。
2. 确保浏览器访问的Xap包是最新的。
检查IE是否已经清除了缓存,或者ClientBin中的Xap因为某些原因没能更新(如因配置管理导致无法覆盖)3. 检查工程是否绑定了Silverlight应用。
可以通过工程的属性面板中的Silverlight Application 页卡查看是否绑定成功。
如下:4. 检查Silverlight工程的StartupObject是否设置正确。
Sliverlight安装部署注意事项赵玉Silverlight开发企业级应用,第一次部署到IIS6会遇到一些问题,为了少走弯路总结了一些常遇到的棘手问题,一般常遇到的问题网上都有解决方法.重点列出以下几个问题.跨域问题Silverlight部署到IIS6不能正常显示IIS虚拟目录对应文件WCF服务访问权限1.跨域问题1)WCF根目录下添加文件: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>2)Wcf项目中放置位置2.Silverlight 应用WCF RIA Services 在IIS6 部署问题1)Silverlight不能正常显示如图,右击虚拟目录->属性->HTTP头->MIME类型。
添加扩展名: .xapMIME类型:application/x-silverlight-app扩展名: .xamlMIME类型:application/xaml+xml3.IIS虚拟目录对应WCF服务访问权限不管是Silverlight+WCF,还是Silverlight+RIA WCF模式.WCF部署文件目录都要加NETWORK SERVICE这个用户.如下图所示:否则会出现跨域访问问题.。
银弹谷V百科使用技巧:报错你还在查百度啊?程序员的生活中最不可或缺的就是—B U G,它或许很少但绝不会脱离你的生活。
一个程序或者系统如果没有点问题,那就不算是一个完美的系统,毕竟任何事物都是有一定进步空间的。
但是在遇到各种各样的异常时,小V也是很头疼呀。
每次看到一排排看起来“高大上”的英文报错,比较笨的小V还要去查一下某些生僻词的意思,然后才能“对症下药”。
不过那么多异常,不能每次都跑去问度娘呀,比较常见简单的异常我们完全可以记住它们。
那么今天!小V来给大家介绍一下这一位--未识别异常Cannot read property\'getRuleInstance' of null。
各位平常可能会遇到这种情况,就是自己明明删除了方法,为什么检查交互的时候还会提示出错,是方法没删掉吗?No,no,no,是事件的关联没有清除!这就好比是指了一条路让自己去走,顺着这条路走着走着,结果发现根本是完全的死路阿,孤单单地“卡”在关联处,怎么可能会不报错嘛!那么造成这个情况的原因是什么?其实很简单。
我们在删除方法的时候,会提示“是否要同步清除关联数据”,如上图。
如果你点了“取消”,那么事件里的关联没有被删除,但是关联的方法已经不存在了,如下图。
在这种情况下,执行期就会报错:未识别异常C a n n o t r e a dp r o p e r t y\'g e t R u l e I n s t a n c e'o f n u l l。
如下图。
这么一看,完全就是自己心软想留下曾经的方法存在过的痕迹,才导致阻碍了继续推进。
而要彻底“斩断”这条无用的联系也很简单。
处理方式:可以用开发系统的“配置检查”功能,找到出问题的事件和方法,修复它。
这样就可以看到是哪个控件还有着和已经不存在的方法的关联了,剩下的只用找到这个控件然后删除掉关联或者给它赋上新的方法就可以啦!怎么样,大家有没有记住呢?下次如果再遇到未识别异常Cannot read property\'getRuleInstance' of null的错误,要记得小V这次讲的使用技巧哦~这个小贴士就讲完啦!本期的V百科到这里就结束啦,关注公众号“银弹谷”了解更多知识哦!。
安装Silverlight提示错误的解决办法
安装Silverlight 5时,如果你的VS不是英文版,那么可能会出现以下错误:Visual Studio 2010 SP1 that matches the language version of Silverlight 5 Tools must be installed before installation of Silverlight Tools can continue.
如图:
解决方法:
解压Silverlight_5_Tools.exe ,用记事本打开ParameterInfo.xml 替换1033 为2052 保存,接着运行SPInstaller.exe ,就可以安装了。
注:记得安装SP1 补丁;1033有很多,直接用全部替换就可以了;另外有可能提示找不到1033,复制xml文件里的1033到查找框就可以了。
安装Silverlight 4时也有可能碰到这样的问题,一样的解决办法:
解决方法:
解压Silverlight 4 Tool 安装包
用编辑工具打开ParameterInfo.xml 文件使用替换领命将“10.0.30319”替换成
“10.0.40219”(不包含引号)
保存,接着运行SPInstaller.exe ,就可以安装了。
office阻止激活silverlight控件的解决方法
要解决Office阻止激活Silverlight控件的问题,您可以尝试以下步骤:
1. 检查Silverlight版本:确保您安装了最新版本的Silverlight,并且与您使用的Office版本兼容。
2. 更新Office设置:打开Office应用程序(如Word或Excel),点击"文件"选项卡,然后选择“选项”或“首选项”。
在出现的窗口中,找到“信任中心”或“安全中心”选项,并点击进入。
3. 添加信任站点:在信任中心或安全中心中,找到“受信任的站点”或“受信任的位置”,然后点击“站点”按钮。
在弹出的对话框中,点击“添加”按钮,并输入包含Silverlight 应用程序的网站地址。
4. 启用ActiveX和插件:在信任中心或安全中心中,找到“ActiveX设置”或“插件设置”,然后确保已启用相应的选项。
检查是否启用了Silverlight相关的ActiveX控件和插件。
5. 重新启动Office应用程序:关闭并重新打开Office应用程序,以使更改生效。
这些步骤应该有助于解决Office阻止激活Silverlight控件的问题。
如果问题仍然存在,请确保您已按照正确的步骤进行操作,并考虑参考Microsoft官方文档或咨询相关技术支持人员。
Winform客户端引用WCF客户端后,部分类无法正常使用在项目中用到WCF,项目的结构是这样的:在SPI项目中编写该解决方案中公共的类及函数;在WCFService项目中写的是svc文件及WCF服务接口;在Client中添加WCF服务引用的时候该WCFService项目,然后再UI项目中初始化Client的实例。
通过该实例WCFService中的方法。
问题:有时会出现这么一种情况,在UI中通过初始化Client的实例。
通过该实例WCFService 中的方法MethodA,该方法的入参是SPI中类ConnectionInfo的实例,然后在UI中再次使用类ConnectionInfo时会发现ConnectionInfo是在Client命名空间下的类,而不是在SPI命名空间下的类。
在WCF自动生成的客户端代理类(Reference.cs文件)中,会将SPI中的类ConnectionInfo,序列化成:[csharp]view plain copy1.[System.Diagnostics.DebuggerStepThroughAttribute()]2. [piler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]3. [System.Runtime.Serialization.DataContractAttribute(Name="ConnectionInfo", Namespace="/2004/07/H aiChuang.AMAC.DataSourceSettings.SPI.Mod" +4."el")]5. [System.SerializableAttribute()]6.public partial class ConnectionInfo : object, System.Runtime.Serialization.IExtensibleDataObject, ponentModel.INotify PropertyChanged {7.8. [System.NonSerializedAttribute()]9.private System.Runtime.Serialization.ExtensionDataObject extensionDataField;10.11. [System.Runtime.Serialization.OptionalFieldAttribute()]12.private string ConnectionStringField;13.14. [System.Runtime.Serialization.OptionalFieldAttribute()]15.private string GuidField;16.17. [System.Runtime.Serialization.OptionalFieldAttribute()]18.private string LocationField;19.20. [System.Runtime.Serialization.OptionalFieldAttribute()]21.private string MenuGuidField;22.23. [System.Runtime.Serialization.OptionalFieldAttribute()]24.private string NameField;25.26. [System.Runtime.Serialization.OptionalFieldAttribute()]27.private string TypeField;28.29. [System.Runtime.Serialization.OptionalFieldAttribute()]30.private int idField;31.32. [global::ponentModel.BrowsableAttribute(false)]33.public System.Runtime.Serialization.ExtensionDataObject ExtensionData {34.get {35.return this.extensionDataField;36. }37.set {38.this.extensionDataField = value;39. }40. }41.42. [System.Runtime.Serialization.DataMemberAttribute()]43.public string ConnectionString {44.get {45.return this.ConnectionStringField;46. }47.set {48.if ((object.ReferenceEquals(this.ConnectionStringField, value) != true)) {49.this.ConnectionStringField = value;50.this.RaisePropertyChanged("ConnectionString");51. }52. }53. }54.55. [System.Runtime.Serialization.DataMemberAttribute()]56.public string Guid {57.get {58.return this.GuidField;59. }60.set {61.if ((object.ReferenceEquals(this.GuidField, value)!= true)) {62.this.GuidField = value;63.this.RaisePropertyChanged("Guid");64. }65. }66. }67.68. [System.Runtime.Serialization.DataMemberAttribute()]69.public string Location {70.get {71.return this.LocationField;72. }73.set {74.if ((object.ReferenceEquals(this.LocationField, value) != true)) {75.this.LocationField = value;76.this.RaisePropertyChanged("Location");77. }78. }79. }80.81. [System.Runtime.Serialization.DataMemberAttribute()]82.public string MenuGuid {83.get {84.return this.MenuGuidField;85. }86.set {87.if ((object.ReferenceEquals(this.MenuGuidField, value) != true)) {uidField = value;89.this.RaisePropertyChanged("MenuGuid");90. }91. }92. }93.94. [System.Runtime.Serialization.DataMemberAttribute()]95.public string Name {96.get {97.return Field;98. }99.set {100.if ((object.ReferenceEquals(Field, value ) != true)) {Field = value;102.this.RaisePropertyChanged("Name");103. }104. }105. }106.107. [System.Runtime.Serialization.DataMemberAttribute()] 108.public string Type {109.get {110.return this.TypeField;111. }112.set {113.if ((object.ReferenceEquals(this.TypeField, value ) != true)) {114.this.TypeField = value;115.this.RaisePropertyChanged("Type");116. }117. }118. }119.120. [System.Runtime.Serialization.DataMemberAttribute()] 121.public int id {122.get {123.return this.idField;124. }125.set {126.if ((this.idField.Equals(value) != true)) { 127.this.idField = value;128.this.RaisePropertyChanged("id");129. }130. }131. }132.133.public event ponentModel.PropertyChangedEventHa ndler PropertyChanged;134.135.protected void RaisePropertyChanged(string propertyName) {136. ponentModel.PropertyChangedEventHandler pro pertyChanged = ertyChanged;137.if ((propertyChanged != null)) {138. propertyChanged(this, new ponentModel.P ropertyChangedEventArgs(propertyName));139. }140. }141. }该实体类代码为:[csharp]view plain copy1./// <summary>2./// 数据源信息3./// </summary>4.public class ConnectionInfo5. {6.public int id { get; set; }7.public string Guid { get; set; }8.public string Name { get; set; }9.public string Location { get; set; }10.public string Type { get; set; }11.public string ConnectionString { get; set; }12.public string MenuGuid { get; set; }13.14. }在 CLient项目的wcf引用上右键,可以看到该实体类在项目中可以找到该dll打开该dll,可以看到该类的信息此处看到的类信息是被转成WCF数据契约形式的类信息解决方案:如果要在UI项目中使用SPI命名空间下的类ConnectionInfo,则将Reference.cs文件中的public partial class ConnectionInfo删除,再在UI中引用SPI项目即可。
关于Silverlight调用WCF/Rest的异常
2011-06-29 10:11:33 我来说两句 0
我要投稿 [字体:小大] 新建Rest服务接口:
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
}接着新建一个服务实现类:
public class Service1 : IService1
{
public string GetData(int value)
{
int i = 0;
int j = 5 / i;
return string.Format("You entered: {0}", value);
}
}
在这里让Service1 抛出”divided by zero exception:”
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="ServiceBehavior" name="WcfService1.Service1"> </service>
</services>
</system.serviceModel>
在这里注意<serviceDebug includeExceptionDetailInFaults="true" />
在Silverlight 客户端添加服务引用,名称为:ServiceReference1.
在页面上添加一个按钮,按钮的Click事件代码如下:
private void Button_Click(object sender, RoutedEventArgs e)
{
Service1Client client = new ServiceReference1.Service1Client();
client.GetDataCompleted += new
EventHandler<GetDataCompletedEventArgs>(client_GetDataCompleted);
client.GetDataAsync(35); //Try GetData
}
void client_GetDataCompleted(object sender,
ServiceReference1.GetDataCompletedEventArgs e)
{
}
运行,结果如下:
可以看到实际的异常是“尝试除以0”,但是由于浏览器限制,所有的异常都是NotFound。
在msdn上有两种方法可以解决这个问题,
最简单的就是在App.xaml.cs代码里面使用RegisterPrefix来使用备用客户端 HTTP 堆栈public App()
{
bool bRegisterPrefix = WebRequest.RegisterPrefix(http://localhost:9541/, WebRequestCreator.ClientHttp);
//other Code
}
再次运行代码:
这是SL调用WCF服务如何处理异常的方式,那么调用Rest服务呢?
首先要修改Web.config 节点下的serviceModel以让它支持Rest。
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="EndpointBehavior">
<webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json"
faultExceptionEnabled="true" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="ServiceBehavior" name="WcfService1.Service1"> <endpoint behaviorConfiguration="EndpointBehavior" binding="webHttpBinding" bindingConfiguration="" name="Rest" contract="WcfService1.IService1" />
</service>
</services>
</system.serviceModel>
在这里要设置webHttp 节点的faultExceptionEnabled=true.并且设置serviceDebug 的includeExceptionDetailInFaults 为true。
OK,服务的Web.config文件已经配置完毕了,接下来要为GetData方法添加WebGet特性修饰了。
public class Service1 : IService1
{
[WebGet()]
public string GetData(int value)
{
int i = 0;
int j = 5 / i;
return string.Format("You entered: {0}", value);
}
}
运行:
可以看到得到了异常信息了。
注意:别忘记了添加跨域和授权文件:crossdomain.xml 和 clientaccesspolicy.xml 到网站根目录。
同样,修改SL客户端页面,添加一个Button,button的代码事件为:
private void btnRest_Click(object sender, RoutedEventArgs e)
{
WebClient wc = new WebClient();
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
}
void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
&n。