关于Silverlight调用WCFRest的异常
Silverlight探秘系列课程 Silverlight调试、错误处理和异常
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 的应 的应用程 程 ,它可帮助您调试基于 序。
Silverlight常见基本问题.doc
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搭建WCF聊天室详细过程
[OperationContract] void DoWork(); }
/html/tips/2010/1223/4401.html[2011-05-28 14:36:23]
SilverLight搭建WCF聊天室详细过程(一)配置IIS_银光中国 Silverlight 资源 社区 论坛
Silverlight之轻 在企业应用的前端开发 中,Ajax、Flash和Silverlight争奇斗
WCF RIA Service随想 下面是个人基于学习的理解,有些不一 定是正确的解释和描述,可以作为你学
Silverlight 4中把DataGrid数据导 出Excel Silverlight中常常用到DataGrid来展示
SilverLight 4正式版发布给开发人员带来了更多功能,并且4已经支持NET.TCP协议,配合WCF开发高效率的 交互应用程序已经不再是难事,本系列文章主要针对已经完成的SilverLight聊天室分几部分为大家演 示WCF双工服务调用。 项目主要使用SilverLight 4和WCF,开发环境VS2010,使用NET.TCP协议,主要实现了以下功能,先前版 本源代码下载可以进群45656086,已经放到群共享里了,我是营长,有问题大家可以提问: 1.多窗口聊天,窗口可拖动 2.用户分组动态显示 3.仿windows任务栏显示当前聊天用户 4.文本消息发送 5.发送图片,并且可放大 6.大文件,多文件同时发送 7.视频,语音并且可以保存 这节主要给大家演示开发前准备工作,如果使用NET.TCP双工必须配置IIS,并且只能在IIS7以上版本, 用VS2010自带的服务器不能实现这些功能。 1.打开VS2010/创建项目/SilverLight应用程序,我这里命名为chat,确定后弹出窗口选择SilverLight4,其 它默认,现在生成了两个项目,chat为我们要使用的SilverLight客户端,chat.Web要用来承载WCF服务。 2.在解决方案上右键/添加/添加新项目/SilverLight类库,我这里命名为chatLibrary,这个类库主要用来生成 和聊天有关的所有操作,按照上面步骤,再添加一个类库项目,命名为chatservice,这个项目主要用来引 用WCF服务生成代理类。 生成完项目后如下图:
解决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是否设置正确。
Silverlight交流
ComponentArt-Web.UI for Silverlight
/
Silverlight技术点验证
多线程支持
SL2之后,即Silverlight 3,4支撑完整的Thread类,即System.Threading 对应的Assembly :mscorilib
两个开发工具
MicroSoft Visual Studio 2008 or 2010+ Silverlight Tools Microsoft Expression® Studio3- Blend3
Silverlight开发套件
DevExpress –SilverlightControls
/AgDataGridDemos/
Silverlight 整体架构
Silverlight 结构
Silverlight 工作原理
从浏览器发出HTTP请求,服务器接到后返回HTML、Javascript Javascript首先检查是否安装了Silverlight插件,如果没有则提供 下载 Silverlight插件是以一个ActiveX运行的,这个ActiveX加载 Silverlight运行时(可以认为是.Net FrameWork的缩减版)到指定 的路径下载执行代码和资源文件的XAP包 Silverlight的部署单位是XAP文件。这个文件包含了manifest信息, 还有运行Silverlight应用所需的所有代码
Silverlight 特点
跨平台的用户体验 小巧方便 丰富的内容功能 可扩展的编程模型和协作工具:Silverlight兼容大量其他标准和现有技术 (包括、AJAX以及.NET3.5),支持JavaScript,C#,VB,Ruby以及 Python等多种开发语言,使得开发者可以根据现有标准,或是采用微软已成 熟技术来开发基于Web的内容。 无需编译:Silverlight基于XAML和JavaScript,由浏览器解释执行,并以 DOM型式公开它的元素树,内容能很好被搜索引擎收录。 高质量、低成本的多媒体技术,最新的SL4支持H.264高清标准 结合数据、服务器和服务 支持内容接入保护技术:无论在Windows还是Mac平台上,Silverlight都支 持多种商业模型,包括订阅、租用、付费浏览或是预览等。
Siverlight安装部署注意事项
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百科使用技巧:报错你还在查百度啊?
银弹谷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提示错误的解决办法
安装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控件的解决方法
要解决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客户端后,部分类无法正常使用
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类库
.NET Framework for Silverlight 类库提供了以下命名空间,本参考对这些命名空间进行了详细介绍。
Microsoft.CSharp.RuntimeBinder包含支持动态语言运行时(DLR) 与C# 之间的互操作的类型。
Microsoft.Internal支持.NET Framework for Silverlight 基础结构。
此命名空间不适于在代码中直接使用。
Microsoft.VisualBasic包含支持Visual Basic 中的Visual Basic 运行时的类。
pilerServices包含支持Visual Basic 编译器的仅供内部使用的类型。
Microsoft.Win32.SafeHandles包含安全句柄类的抽象派生类,可提供支持文件和操作系统句柄的常用功能。
System包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、属性和处理异常的基础类和基类。
其他类提供的服务支持数据类型转换、方法参数操作、数学运算、远程和本地程序调用、应用程序环境管理和对托管与非托管应用程序的监控。
piler包含的类可标识由工具生成的代码。
System.Collections包含BitArray类、由各种集合对象实现的接口以及支持提取、枚举和比较集合中的对象的接口和结构。
System.Collections.Generic包含定义泛型集合的接口和类。
System.Collections.ObjectModel包含能在可重用库的对象模型中用作集合的类。
在属性或方法返回集合时使用这些类。
System.Collections.Specialized包含专用和强类型集合。
ponentModel提供用于实现组件和控件的运行时和设计时行为的类。
position提供构成托管扩展框架(MEF) 的核心的类。
position.Hosting提供对可扩展的应用程序或主机的开发人员有用的MEF 类。
Silverlight跨域在IIS中部署等问题解决方法
Silverlight跨域,Silverlight在IIS 中部署等问题解决方法一:Silverlight 跨域Silverlight在设计的时候对网络安全方面做了很多考虑,具体可以看Silverlight SDK。
跨域通信是通过在其他域的根部署使用正确跨域策略文件的 Web 服务,可以在该域中启用基于 Silverlight 的应用程序要调用的 Web 服务。
Silverlight 支持两种类型的跨域策略文件。
∙ Silverlight 跨域策略 (clientaccesspolicy.xml)∙ Flash 跨域策略 (crossdomain.xml) 的子集使用跨域策略文件的跨域通信通常,如果基于 Silverlight 的应用程序检测到其请求是一个跨域请求,将首先在 Web 服务的应用程序根处查找 Silverlight 跨域策略文件(clientaccesspolicy.xml)。
如果这个请求导致"404 未找到"或其他错误,应用程序将在应用程序根处查找 Flash 跨域策略文件(crossdomain.xml)。
不允许重定向跨域策略文件。
此外,跨域策略文件保持对应用程序会话有效。
现在知道了只要在网站中部署一个跨域策略文件,就可以解决Silverlight跨域请求问题。
跨域策略文件要放在哪里?注意:跨域策略文件必须也只能放在网站的放置在根目录下。
clientaccesspolicy.xml配置:<?xml version="1.0" encoding="utf-8"?><access-policy><cross-domain-access><policy><allow-from><domain uri="*"/></allow-from><grant-to><resource path="/"include-subpaths="true"/></grant-to></policy></cross-domain-access></access-policy>crossdomain.xml配置:<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" /></cross-domain-policy>二:Silverlight 在IIS 部署用silverlight开发的程序,部署到IIS 上,会经常弹出“Sys.InvalidOperationException: InitializeError error#2104 in control 'Xaml1': 无法下载 Silverlight 应用程序。
WCF基本异常处理模式[下篇]
WCF基本异常处理模式[下篇]从FaultContractAttribute的定义我们可以看出,该特性可以在同一个目标对象上面多次应用(AllowMultiple = true)。
这也很好理解:对于同一个服务操作,可能具有不同的异常场景,在不同的情况下,需要抛出不同的异常。
1: [AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = false)]2:public sealed class FaultContractAttribute : Attribute3: {4://省略成员5: }但是,如果你在同一个操作方法上面应用了多了FaultContractAttribute特性的时候,需要遵循一系列的规则,我们现在就来逐条介绍它们。
一、多次声明相同的错误明细类型比如在下面的代码中,对于操作Divide,通过FaultContractAttribute特性对同一个错误明细类型CalculationError进行了两次设置。
1:using System.ServiceModel;2:namespace Artech.WcfServices.Contracts3: {4:[ServiceContract(Namespace = "/")]5:public interface ICalculator6:{7:[OperationContract]8:[FaultContract(typeof(CalculationError))]9:[FaultContract(typeof(CalculationError))]10:int Divide(int x, int y);11:}12: }WCF服务端框架在初始化ServiceHost,并创建服务表述的时候(关于服务描述,以及在服务寄宿过程中对服务描述的创建,《WCF技术剖析(卷1)》的第7章有详细的介绍),会抛出如图1所示的InvalidOperationException异常。
WCF项目中出现常见错误的解决方法:基础连接已经关闭:连接被意外关闭
WCF项⽬中出现常见错误的解决⽅法:基础连接已经关闭:连接被意外关闭在我们开发WCF项⽬的时候,常常会碰到⼀些莫名其妙的错误,有时候如果根据它的错误提⽰信息,⼀般很难定位到具体的问题所在,⽽由于WCF服务的特殊性,调试起来也不是那么⽅便,因此往往会花费不少时间来进⾏跟踪处理。
本⽂介绍我在我在我的框架⾥⾯使⽤WCF 服务的时候,出现的⼀个常见错误的处理⽅法,它的提⽰信息是:基础连接已经关闭: 连接被意外关闭。
这种情况我碰到的有两种,⼀种是返回DataTable的时候出现的,⼀种是返回实体类类中带有枚举类型的情况,下⾯分别对它们的处理进⾏介绍。
1、DataTable返回值出现错误⼀般情况下,我们在设计WCF接⼝返回值的时候,都使⽤实体类或者实体类列表这种⽅式,但是有时候也可能需要返回⼀个DataTable的数据类型,如果按照下⾯的⽅式构造函数内容并返回,就可能出现错误。
定义接⼝///<summary>///根据查询条件,返回记录到DataTable集合中///</summary>///<param name="condition">查询条件</param>///<param name="pagerInfo">分页条件</param>///<returns></returns>[OperationContract]DataTable FindToDataTableWithPager(string condition, ref PagerInfo pagerInfo);实现函数,为了⽅便演⽰,填写了简单的测试代码。
///<summary>///根据条件查询数据库,并返回对象集合(⽤于分页数据显⽰)///</summary>///<param name="condition">查询的条件</param>///<param name="info">分页实体</param>///<returns>指定对象的集合</returns>public DataTable FindToDataTableWithPager(string condition, ref PagerInfo pagerInfo){//测试代码DataTable dt = new DataTable();dt.Columns.Add("Test");for (int i = 0; i < 10; i++){dt.Rows.Add(new object[] { "Test" + i });}return dt;}测试的时候,会发现出现错误如果你按照它的提⽰,你可能搔破头⽪也不知道具体是哪⾥的问题,这个地⽅其实很有意思,就是因为序列号DataTable的时候,没有TableName导致的,如果把函数体的实现⾥⾯,为返回的DataTable对象的TableName属性赋值⼀个值就可以了。
WCF实例
学silverlight学到WCF,嗯,WCF的确有点难,不过没所谓,一点一点来,下面就尝试着实现一个最基本最简单的WCF例子,里面不涉及到EndPoint、Binding、Element、异步调用、序列化等等这些或者其他更难理解的概念,只是简单地按照默认设置用最简单的代码把WCF最基本的应用体现出来。
第一步:创建一个空的解决方案,新建一个WCF服务应用程序项目(使用默认名字)来模拟服务端,新建一个控制台应用程序项目(名称改为ConsoleApp)来模拟客户端。
第二步:简单分析WcfService1项目,该项目内容如下:一句话总结:这个项目模拟服务器端,Service1.svc文件封装的就是提供给客户端的服务引用,Service1.svc.cs文件里是服务引用的具体实现。
但这里因为Service1.svc.cs文件里的主要内容——Service1类是继承于IService1.cs文件里的IService1接口,所以重头戏分了一半给IService1.cs文件。
首先看IService1.cs文件,从名字上可以看得出这个是接口文件,里面定义了了一些接口,接口声明了一些方法。
我在里面添加两个类public class student1 、public class student2 和一个方法public student1 student1Class() 用作测试。
代码如下:View Code1using System;2using System.Collections.Generic;3using System.Linq;4using System.Runtime.Serialization;5using System.ServiceModel;6using System.ServiceModel.Web;7using System.Text;89namespace WcfService110 {11// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“ISer vice1”。
类型初始值设定项引发异常的解决方法
类型初始值设定项引发异常的解决方法
解决初始值设定项引发异常的方法可以根据具体情况来进行调整,以下是几种常见的解决方法:
1. 检查变量的初始设定值和变量类型是否匹配:如果变量的初始设定值与其类型不匹配,会引发异常。
因此,需要检查变量的初始设定值是否与所需的类型相符。
2. 使用try-catch块进行异常捕获:可以在相关代码段中使用
try-catch块来捕获引发的异常,并进行相应的处理。
例如,可
以在catch块中打印错误消息或进行其他适当的操作。
3. 使用条件语句进行初始值设定项的判断:在设定初始值时,可以使用条件语句来判断是否满足特定条件。
如果不满足条件,则可以选择使用默认值或设置其他合理的初始值。
4. 检查输入参数的有效性:如果异常是由传入的参数引发的,可以在函数或方法的开头处添加参数检查的代码,以确保参数的有效性。
5. 使用合适的数据结构:有时,选择使用合适的数据结构可以避免或减少引发异常的可能性。
例如,使用集合类来存储一组元素,可以避免一些与数组相关的异常。
6. 调试代码:使用调试工具和技术,跟踪代码并查找引发异常的根本原因。
通过理解异常发生的原因,可以进一步有针对性地解决问题。
需要注意的是,具体的解决方法将根据引发异常的具体情况而定。
因此,如果以上方法不能解决问题,可能需要进行更深入的调查和分析,或者寻求专家的帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于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。