2009-02-24
1、 客户端运行wpf程序需要.netframeworks3.5支持,不管是窗口应用还是web应用(xbap)。这样选择xbap就不如窗口应用了。
<span style=”color: red;”>XBAP是有点鸡肋,比上WPF不方便(开发受浏览器沙箱模型限制),比下Silverlight不足(没办法简化部署)</span>
2、 WPF界面与分辨率无关,可自动缩放(布局时),设计公用库时无需考虑缩放问题。
<span style=”color: red;”>可认为XAML界面与矢量图形一样,在缩放时不会变样;但在设计公用库时仍要通过布局来设定控件缩放!</span>
3、 WPF的程序入口:结点的Startup属性用来表示程序的入口。
<span style=”color: red;”>Silverlight的程序入口是在代码中设定</span>
4、 Wpf中树的概念很重要,事件的顺序,资源的顺序等都是根据树来检索的。
<span style=”color: red;”>分逻辑树与可视树</span>
5、 对于企业级应用,后台数据库和前台界面的交互是比较重要的,本周着重看msdn上面关于数据绑定的部分:
<span style=”color: red;”>三层架构中,数据库只会与业务层交互,前台界面层只会使用业务层传过来的数据(如DataSet或XML)</span>
6、 数据绑定有默认的转换器,但有时需要自定义转换器,如下列情况:
数据应根据区域性以不同方式显示。例如,可能需要根据在特定区域性中使用的值或标准,来实现货币转换器或日历日期/时间转换器。
使用的数据不一定会更改属性的文本值,但会更改其他某个值(如图像的源,或显示文本的颜色或样式)。在这种情况下,可以通过转换可能不合适的属性绑定(如将文本字段绑定到表单元格的 Background 属性)来使用转换器。
将多个控件或控件的多个属性绑定到相同数据。在这种情况下,主绑定可能仅显示文本,而其他绑定则处理特定的显示问题,但仍使用同一绑定作为源信息。
<span style=”color: red;”>数据绑定是很重要的概念。</span>
7、 要想实现数据改变时触发ui的同步刷新,做为绑定源的集合对象必须实现INotifyPropertyChanged接口(属性改变)和INotifyCollectionChanged接口(集合改变)。
8、 数据绑定可以使界面设计更灵活,但是在设计界面层公用控件是就增加了很多工作量,需要考虑集合试图,按显示功能制作数据模板,使用样式的选择。集合对象需要实现特定接口等内容。设计时需要加入设计模式的考虑,否则设计出的界面公用库效果不会很好。
9、 Xaml的分页如何实现?(用户界面虚拟化)
<span style=”color: red;”>分页是何意?XAML中的控件允许动态添加下级子控件,这样就能动态切换界面。</span>
10、 动态资源和静态资源。静态资源引用不会基于运行时行为(例如重新加载页)进行重新求值。动态资源的值取决于直到运行时才知道的情况。这包括系统资源,或用户可设置的资源。因此,根据您的资源和应用程序设计避免大量不必要的动态资源引用,这样可以提高性能。
<span style=”color: red;”>静态资源的查找顺序是:当前控件资源?根节点资源?应用资源?系统资源?主题资源</span>
11、 将数据模板制作成资源可提供程序的重用性与灵活性。
12、 我们可以在 ListBox 上将 HorizontalContentAlignment 设置为 Stretch 来确保项的宽度占据整个空间。
13、 不在自定义控件中定义资源可以提高效率。
14、 使用wfp或者silverlight后是否能和现有的较成熟的asp.net和ajax结合起来?
<span style=”color: red;”>技术上实现没有任何问题,但就会加大程序员技术学习难度及维护成本。</span>
=====================
15. 在vista的iis7中发布基于silverlight的asp.net网站需要增加mime映射,语法为:C:WindowsMicrosoft.NETFrameworkv3.0Windows Communication FoundationServiceModelReg.exe –i
16、silverlight基本库中无对中文的支持?连宋体、黑体等字体都要添加外部引用?
语法:
嵌入字体的两种办法
一 将“复制到输出目录”属性值改为“如果较新则复制”,将“生成操作”属性值改为“内容”
二 将“复制到输出目录”属性值改为“不复制”,将“生成操作”属性值改为“Resource”
17、 ado.net entry framework + linq 能否实现灵活的sql语句?比如查询一个病人费用明细时故意使用trunc(operation_time)使时间索引失效或者指定索引。
<span style=”color: red;”>应当是没办法,LINQ没这么智能去处理,可以尝试使用Entity SQL</span>
18、 在silverlight中引用wcf服务时,是否支持数据契约?在引用新建的wcf时,vs2008自动生成了一个数据契约和操作契约,silverlight引用这个wcf服务时,自动生成的数据契约部分有报异常。
19、 使用firefox浏览器测试过同一个silverlight程序,效率无明显提升。
=====================
1、 wpf客户端访问提示证书权限不够时需要将vs中的工程Properties中的安全性标签页设置为完全可信的应用程序,并导入wpf创建工程时产生的证书文件。
2、 wcf的工程有两种:wcf服务应用程序和wcf服务库,wcf服务应用程序debug时直接打开的是发布形式的网页,wcf服务库debug时可以弹出vs自己的wcf调用程序,可以用来测试服务。创建时应尽量创建wcf服务库。
3、 使用ado.net取数据时市民健康的做法是,直接创建dataset对象,在dataset对象里面封装取数据的语法,使用时实例化dataadapter对象来获取数据 需要比较的是如此封装的效率问题及对应用服务器资源的使用问题,dataset是比较占用资源如内存的技术。
<a href=”http://blog.fightfly.com/upload/month_0904/09042009380ebec56755cdb208.jpg” target=”_blank”>未命名.jpg</a>
4、 我自己电脑坏的时候有使用过小吴的电脑跑了下程序,她电脑配置有1g的内存,可是xbap的程序根本跑不起来,xbap是否特别需要显卡的支持?有必要评估下需要跑xbap的最低电脑配置。
5、 Xaml界面控件命名用必要加前缀。
=====================
1、 自定义控件的loaded事件会执行多次?目前有遇到执行两次或三次的。
重写EndInit事件,不应使用+=注册事件
2、 Xaml里面调用自己工程里面的自定义控件会提示找不到程序集,但是编译和运行都正常。是否属于动态资源?
=====================
20090330
1、 foreach和for的区别?
Foreach为遍历的语法,对于遍历目标为变量时,用于循环的变量为只读的,不允许改变集合中的值,如遍历整形数组时;foreach(int I in intarray)不能出现I = xx;这种赋值语法。但是遍历目标为类时,循环变量为引用型,这时就可以通过改变循环变量的值来改变集合中该项的值了。
2、 c#中对于空值的处理要特别注意,比如tostring()这个函数,在使用之前要确保值不能为空,否则会抛出异常。时间型的空值也是比较麻烦,是否需要统一规定空值的处理步骤。
3、 编程时应该养成写断言的习惯。好的习惯是每50行就能看到断言。
=====================
1、 xbap以完全信任发布时如需在客户端创建文件仍然需要客户端文件夹的权限,程序中可以通过调用api函数来模拟高权限的用户来实现提升权限。来解决实达医保接口问题。
2009-02-25
1、在Silverlight 2应用程序中切换用户控件
在Silverlight 2应用程序中,每个应用程序将生成一个xap文件,每一个xap文件中只能设置一个起始的用户控件。如果我们有多个用户控件,需要在不同的ASP.NET页面中加载,最简单的方法莫过于针对多个用户控件分别建立对应的Silverlight项目,但这种方式有很多的缺点,如我们的样式文件需要在多个项目中进行拷贝。是不是有什么更好的方式来实现?
要实现这个功能,我们可以使用InitParams这个属性,比如在temcontroltest项目中有PageOne,PageTwo,PageThree三个用户控件,需要在不同的asp.net页面中加载不同的用户控件时就在页面代码silverlight控件中加入InitParams属性:
2009-2-24
1. IIS启动不了,提示意外错误Ox8ffe2740:
如果系统中存在端口冲突就有可能发生本情况,IIS默认使用80端口进行http通信。如果除IIS外的应用程序正在运行并且正在相同的IP地址上使用80端口,此时使用IIS管理器启动网站时就可能收到该错误讯息。
解决方法:
要解决这个问题,您可以进行以下任一项操作:
? 在IIS管理器中更改网站绑定端口为除80端口外的其它端口。
? 停止正在使用80端口的应用程序,然后从IIS管理器中启动网站(可以使用tcpview或fport等第三方工具来判断其它正在使用80端口的其它应用程序)。
2. 在IIS中托管WCF所需环境:
在IIS中托管WCF需要安装.NET Framework3.0、IIS、ASP.NET。注意必须在安装.NET Framework3.0之前安装IIS,因为安装.NET Framework3.0时安装进程会自动使用IIS注册必要的WCF组件。如果实际安装顺序刚好相反,则必须多做几步工作来向IIS注册WCF:
? Windows XP SP2 和 Windows Server 2003:
使用 ServiceModelReg.exe 工具向 IIS 注册 WCF,在命令提示符下键入: ServiceModelReg.exe /i /x
? Windows Vista:安装 .NET Framework 3.0 的 Windows Communication Foundation Activation Components 子组件。在控制面板中,单击“添加或删除程序”,然后单击“添加/删除 Windows 组件”。这将激活“Windows 组件向导”,安装Windows Communication Foundation HTTP Activation Component。
[color=Red]先装IIS,再装.Net Framework3.5+SP1[/color]
3. WCF服务可以使用IIS的一些版本托管:
IIS5.1 on Windows XP w/Service Pack 2
IIS6.0 on Windows Server 2003
IIS7.0 on Windows Vista
IIS5.1和IIS6.0仅限于HTTP通信,而IIS7.0允许WCF服务使用任何支持WCF的网络协议(net.tcp、net.pipe和net.msmq)进行通信和操作。
4. C#中类的静态成员和非静态成员的区别:
在类中将某个成员声明为static,则该成员为静态成员。类中的成员要么是静态要么是非静态成员。一般来说,静态成员属于类所有,非静态成员则属于类的实例-对象。每创建一个类的实例,都在内存中为类的非静态成员开辟了一块区域。而类的静态成员属于类所有,为这个类的所有实例所共享。无论这个类创建了多少副本,一个静态成员在内存中只占有一块区域。
[color=Red]静态类相当于全局变量[/color]
5. 在实际学习过程中,主要侧重于看书和相关资料,实际编程较少,学习效果不是很好,应该边学习边实践学习才会更快。
==================
2009-03-06
1. WCF服务部署后,客户端程序调用WCF服务连接ORACLE数据库时提示:
System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。
解决方法:
原来当Oracle 9.2运行在NTFS的分区上时,对于某些非administrator组的用户,ORACLE_HOME 目录是不可见的,而在windows server 2003下asp.net应用使用的帐户是netword service,因此无法创建oracle连接,只要重设一下ORACLE_HOME目录的权限就可以了。
步骤如下:
a、以管理员的用户登录;
b、找到ORACLE_HOME文件夹(我的是D:\oracle\ora92),点右键,选属性–安全,在组或用户栏中选“Authenticated Users”,在下面权限列表中把“读取和运行”的权限去掉,再按应用;重新选上“读取和运行”权限,点击应用;选权限框下面的“高级”按钮,确认“Authenticated Users”后面的应用于是“该文件夹、子文件夹及文件”,按确定把权限的更改应用于该文件夹;
c、重新启动计算机,让权限设置生效;
2. VS2008开发ADO.net entity framework时,仅支持SQL SERVE数据库,要使用ORACLE,就要结合第三方工具CORE LAB才可以使用。需要安装OraDirect4.75%26OraDeveloperTools安装包(该工具,需要Oracle9.2.0.4以上才支持)
3. WCF调试程序时,提示以下出错信息:
[attach]9[/attach]
主要是由于当前WCF托管在本机的IIS中,先把IIS中的默认网站停止,调试完再启动IIS默认网站即可
4. silverlight调用WCF服务时提示跨域访问出错,主要是由于安全原因,silverlight如果要访问不同域名WCF服务,必须要在WCF服务的宿主建立一个跨域文件。如果你的WCF服务的宿主是IIS,那么这个文件必须在IIS的根目录,而不是WCF服务的根目录。
文件名:clientaccesspolicy.xml
文件内容:
5. Silverlight的WCF Binding只支持 binding=”basicHttpBinding”
6. 序列号可否通过ADO.NET Entity Framework获取?
ADO.NET Entity Framework好像是没有支持序列号
[color=Red]Entity Framework肯定不像嵌入式SQL语法那么灵活,获取序列号应当要用ADO.Net来写[/color]
7. Silverlight中设置自由风格录入界面时,每个字段要一个个划,设置绑定,读取、更新数据都比较麻烦,暂时没有找到比较简单的方式处理?
8. DateTime类型字段,传递不好传,例如:从实体框架中取出DateTime类型字段赋值给类的DataTime成员变量时,必须强制类型转换才可以,
sick_info.Birthdate = (DateTime)row.BIRTHDATE;
[color=Red]一般类型一致是不用转换的,到时看一下代码[/color]
9. Silverlight界面,下拉数据窗如何处理?代码名称如何转换?
10. Silverlight界面,如何实现弹出拼间码选择?
==================
1. WPF控件ComboBox数据行数多了会出错:
数据多时,改成弹出框选择
2. WPF录入界面,如何用回车键代替TAB键?
3. 本地、系统参数如何实现缓存?
4. 保存前的检查如何动态配置?
5. 日期框录入,格式如何设置?
6. 计算机名如何获取?
7. WCF绑定改成TCP绑定后,提示不支持TCP协议
测试
==================
1. 应用服务器装完VS2008和ORACLE11后,tnsping服务可以通,但无法连接数据库
修改windows的环境变量Path
把c:\oracle\app\administrator\product\11.1.10\db_1\bin;放到最前面
2. 应用服务器装完VS2008和ORACLE11后,命令行可以连接数据库,程序调用提示无法解析服务名
ORACLE11会安装oralce for .net framework,把这个卸载掉,重启计算机就可以了
注:?
3. WCF业务处理,例如:取病人余额,尽量不要用static方法
在多用户并发环境下,ADO.NET在设置病人ID 参数查询时,可能会查询到另外一个人的余额
[color=Red]注:服务端所有业务非必要不准用静态方法(static),以防止并发调用;客户端则关系![/color]
==================
1. Windows 2008 IIS7.0部署WCF服务,采用TCP绑定时要启用net.tcp协议才支持
在命令行执行:
%windir%\system32\inetsrv\appcmd.exe set site “Default Web Site” -+bindings.[protocol=’net.tcp’,bindingInformation=’808:*’]
%windir%\system32\inetsrv\appcmd.exe set app “Default Web Site/Zhis5Service” /enabledProtocols:http,net.tcp
2. Microsoft Visual Studio 版本控制由Microsoft Visual SourceSafe(Internet)切换成Microsoft Visual SourceSafe
选择Microsoft Visual Studio菜单“工具”->“选项”->“源代码管理”->“插件选择”进行切换
3. 契约的操作方法必须加上FaultContract(typeof(FaultDataMessage))]在客户端才能通过以下正确捕获:
try
{…}
catch (FaultException fx)
{…}
4. 如何实现服务端异常(客户端确认的异常、应用异常、其它异常)统一处理,客户端统一
捕获处理?
==================
1. 使用ADO.NET连接池时,要注意防止连接泄漏(连接使用后没有正常关闭,连接池无法收回重新使用)
连接后一定要记得关闭
2. 使用ADO.NET连接池时,如果有设置最小连接数,则在第一次打开连接池时,在连接池中会自动建立最小连接数个连接
3. 使用ADO.NET适配器时,使用完一定要记得关闭连接,由于适配器使用完后会恢复到使用前的状态,不会自动关闭连接
4. C# 小数位截取规则“四舍六入五成双”:实际上就是四舍六入,而如果去掉的位是5则看前面一位的奇偶,偶数则舍,奇数则入。
5. ASP.NET Cache缓存支持数据库依赖,但只支持SQL SERVER数据库
2009-02-25
一、 问题?
1、 WPF部署问题(采用何种策略?)
WPF应用一般都采用ClickOne部署,若是XBAP应用则直接发布到IIS上。
2、 WPF如何动态添加控件?(像护士工作站导航界面中那样就行控件的动态加载!)
WPF编程与.Net Forms编程一样,完全可用代码动态创建并添加到相应的容器中。
3、 XBAP是否与ASP.Net重复?
不存在重复或替代的说法,XBAP与Silverlight主要是基于XAML的客户端表现层技术,ASP.Net主要是服务端技术。
4、 如何遍历窗体的所有控件并进行自动扩展?
WPF可通过遍历“逻辑树”得到所有控件?自动扩展是何意?
5、 是否可以用DataWindow.net来替代DataGrid?
可以,但现在还未推出支持WPF与Silverlight版本的DataWindow.net
6、 如何设置数据连接池?(.Net数据库连接和断开一个数据库的花销很大,反复连接和断开数据库对于系统的性能影响将非常严重)
三层架构中,ADO.Net会自动管理数据库连接池
7、 WPF里怎样实现MDI(多文档)?
WPF现在是不支持MDI窗口的
8、 WPF中treeview的数据绑定?
从效率考虑,一般是不考虑在TreeView中直接绑定数据;可在公用库中实现与PB类似的TreeView(点击后动态获取数据展开节点),在代码中直接处理节点数据
二、问题处理
1、图片像素模糊?
容器边框设为非整数时,其内容中的像素图片会产生模糊,即使设置SnapsToDevicePixels=”True”也无效。因此建议BorderThickness值设为整数
2、Gird布局无法自适应内容扩展?
可以通过将“”改为Height=”Auto”/来解决这一问题,设为“Auto”后,Grid将强制将行高定为其内容所需的高度。此前我们所设置的“*”的作用实际上是为内容自动分配剩余空间的高度,在剩余空间充足的情况下,它还会自动进行一些智能化的调整,使得呈现更为合理,而当剩余空间紧张时,它就不得不强行为一些大块头开刀了。
=====================
1. WPF打印问题
? WPF打印表格,表格的数据有多页,但是显示出来只有当前页,应如何把所有的行都打印出。
? 在打印的时可否动态选择需要打印的行或列。
? 如何把表格的数据生存XPS文件然后进行XPS文件的打印。
2. DataGrid控件问题
? DataGrid中列如何绑定子数据窗、CheckBox等。
? 如何设置某列的显示格式。
=====================
1、 在PB中可以弹出响应窗口对数据进行接收或读取,而在WPF没有这种响应窗口,是否有必要封装自定义的模态窗口。当然我们可以采用Popup控件的方法来实现这个需求。
2、 如何解决WPF中动态加载控件调试的问题。(PhsicQuery.xaml画面)
3、 如何改变XAML中控件的动态布局。
4、 datagrid有许多属性很陌生,能否是根据datawindow的一些常用属性(如:取列值、当前行、总行数等等)整理出datagrid对应使用的属性及规范。这样,一来可以让程序员对datagrid的一些属性以同样方式调用,二来可以不用为了实现某些功能而在网上找半天。
2009-2-25
学习DOT NET 3.5平台技术已经有一段时间了,在此期间有一些心得体会,并结合ZHIS5的设计,提出一些心得体会和大家分享,并整理了一些问题也做一一罗列。
1. DOT NET 3.5平台以及开发工具的安装
首先DOT NET 3.5对系统环境要求是非常高的,我们通常是用VS2008工具来开发,但是Silverlight 2.0并没有与VS2008完全捆绑式安装,所以必须单独安装。同时目前VS2008对界面设计并不好用,所以为此还需要安装针对Silverlight和WPF而做的界面开发工具Blend 2。这些工具的不仅安装耗时长,而且还必须有一个先后顺序。
现在就讲讲安装的顺序:
a、首先必须先装VS2008以及VS2008的sp1补丁(其中包含了DOT NET 3.5的sp1补丁);
b、安装Silverlight 2.0 sdk以及补丁(注意:不能在安装Silverlight2.0之前安装Blend以及Silverlight 1.0,否则必须卸载干净后,重启继续安装Silverlight 2.0)
c、安装silverlight2.0的sp1补丁;
d、最后安装Blend 2以及Blend 2补丁。
只要安装“Silverlight Tools for VS2008 SP1”就可以,不用再装SDK。
2. Blend的控件只显示系统默认的常规控件。许多其他控件在VS2008能看到,但是在Blend里面看不到
这个问题查了半天也没查到。但是目前有1种方法可以试一试:安装Silverlight Toolkit,在Blend里面引用,并指明命名空间,通过书写XAML代码来构建控件实现。
项目工程添加程序集引用后,在Blend资源库中都能找到的(自定义控件栏);另外, DatePicker控件在SDK程序集“System.Windows.Controls.Data.dll”中,而DataGrid在SDK程序集“System.Windows.Controls.dll”中;其它两个常用控件Label与Treeview都在Toolkit程序集“Microsoft.Windows.Controls.dll”中。上述三个程序集都要包含在应用xap中发布。
3. 如何实现Silverlight 2.0或者WPF的继承
大家都知道,Silverlight 2.0和WPF的项目都是采用Code Behind技术,其中界面设计文件存放在.XAML文件中,而业务代码部分则是放在.CS文件(用C#描述)。这种技术在继承上是比较麻烦的,其中业务代码部分子页继承父页,界面部分同样也要申明继承,并且在子页还要开辟本应用的命名空间。
首先,XAML文件是不能继承的,所以控件继承树中,XAML界面描述文件中要么在基类中定义,要么在子类中定义;而自定义控件在使用时,必须在XAML文件根节点定义相应的命名空间(C#命名空间+所在程序集),在使用的地方加命名空间前缀。
4. 如何在Silverlight或XBAP实现响应式窗口(或者类似拼音码选择窗口用何种界面表现形式)
这个问题看似简单,其实比较麻烦。现在我找到的方法有2种:
a、是使用popup控件。其中popup控件操作简单,可以用XAML表述,封装了弹出的功能,样式可自定义,作为官方的解决方案。但是据说popup中如果包含了datagrid的类的复杂control控件的时候,会出BUG。
b、所以可能需要我们单独定义一个类来实现。其中首先要通过工厂方式获取一个popupservice的对象,其中这个popupservice掌握着所有的弹出消息。
一般是使用Popup类(在 Silverlight 控件的界限之内,现有 Silverlight 内容之上显示内容;在程序集“PresentationFramework.dll”的命名空间“System.Windows.Controls.Primitives”中),具体有何问题在使用后再解决;
5. 票据定制要采用何种方式实现
采用保存样式文件。
XAML中模板用来改变控件的外观(如可将标准控件Button外观改为在圆形边框中显示图片与文字),而样式可以用来统一定义目标控件的属性(含模板);所以票据定制用样式资源是无法解决的;若直接用把XAML文件存入数据库,就可解决外观定制问题,但数据绑定的改变如何解决仍无答案?(ADO.net Entity Framework?)
=====================
20090306
一、 Silverlight部分
1. 理解ContentControl控件的Content属性
我尝试做了一个带图片和文字的按钮,结果老提示Content里面只能包含一个对象。那如何实现这个功能呢?这里我们首先要明白Content是一个对象容器的概念,他只能包含一个对象,这时候我们可以用一个容器把他包含进去,比如先在按钮里面Content属性里面增加一个Grid,然后在Grid的下级再增加图片和按钮。
2. 如何获取浏览器正文的实际高度(自动扩展控件中使用)?
在JavaScript里面,实现获取浏览器正文的高度很容易,只要调用Document的函数就可以获取到,但是我们现在写的程序最好不要再使用JavaScript,所以我做了一个尝试,在主页面第一级节点定义一个GRID,然后来获取GRID对象的实际高度,结果返回值不对?最后发现,定义一个GRID来获取高度是不对的,因为GRID只会和GRID内部的对象的高度进行改变,并不会根据屏幕的高度进行扩展,所以后来我的处理方式是,在GRID里面再定义一个无边界的Border,去获取Border的实际高度就可以了。
3.
二、 WCF部分
三、 ADO.NET Entity Framework部分
1. 利用实体框架如何获取系统时间?
因为实体框架是对数据库结构的映射,所以比如ORACLE的dual就不可以使用。我做了这样一个尝试:把获取系统时间做一个视图,结果还是会出现问题,因为所有的实体框架引用的数据库对象里面的表都必须有主键。所以这个目前还只能用ADO.NET来实现。
=====================
一、 WPF部分
1. 如何设置全局变量?
我尝试使用Application类设置resource,结果发现只有WinForm才可以使用,后来还是用定义公用全局属性的方法来做。
2. 建立的DataGrid无法写入数据?
3. DatePicker控件默认显示在英文如何去掉?
4.
二、 WCF部分
1.
三、 C#部分
1. 定义一个函数,其中一个out参数的返回类型为泛型数组,返回的时候总是报该数组的可访问性不一致?
2. 数据类型转换
通常转换有这几种方法:Parse()、Covernt.To..(),其中Covernt是最强制类型转换。
=====================
一、 WPF部分
1. 自定义可视控件继承后如果不使用样式就显示不出来?
最后发现这个问题很傻很天真,这是因为按WPF模板建立的自定义控件在初始化类的时候就会默认重写属性,这样当然要自己去建立样式了。
2. 主题文件如何引用多个资源字典?
指定资源文件有好多方法,但是我只有用下面这种使用嵌入在二进制资源里面调用资源的方式。如下:
=====================
1. 采用代理模式造成本程序集的对象引用不到?
app.config不检入版本库。
2. 被引用对象ChildUserControl里的某个控件绑定了全局样式,造成引用这个对象的父类对象FatherUserControl里面引用不到ChildUserControl?
全局样式不指定Key。
3. 自定义控件的Loaded事件会触发两次?
我新建了一个自定义控件,在控件实例化的里面写了Loaded事件委托给一个方法A,这个方法里面又将某个事件委托了另外一个方法B,结果造成委托给B方法2次,B执行了2次。最后发现是Loaded事件搞的鬼,因为自定义控件里面的重写依赖属性的元数据(OverrideMetadata)会造成Loaded了两次。
解释一下为什么我要在Loaded的委托方法A里面再写委托,这其实是有不得已的地方,因为我在该控件的类文件声明使用了在该控件模板的某个子控件定义的name,而使用控件类文件的名称是不能在自定义控件的实例化里面写,因为那时候还没调用到模板。
=====================
1. 如何重写被引用控件的方法?
只有继承才能被重写方法,被引用对象的方法只能通过委托和接口两种方式。
2. 正确理解事件?
C#的事件和PB的事件是截然不同的,C#事件是都是无返回值的,而PB的事件是具有返回值的。
20090306
一、 开发环境如何配置?(需要建立几个应用程序?需要部署几个服务才合理? )
通过几天的学习,建立了两个解决方案,其中包括一个WCF服务应用,一个Silverlight应用程序和一个支持改SL程序的WEB应用服务(即wcf、webservice和webclient)。因此,在WINDOWS的INTERNET管理工具里就建立了两个相应的虚拟目录,一个是WCF,一个是SL_WEB。
二、 SL2.0问题汇总:
1. 如何把SL2.0默认的提示改为友好的自定义提示,如,我全屏幕的时候系统提示我:“按ESC退出全屏”,然后消失掉了?
2. SL2.0在blend开发的XAML中好像不支持中文字体,如“宋体”。而在VS开发中是支持的。所以在相互应用的时候会有错误。如何解决?
3. 怎样才是SL2.0 数据访问的最优解决方案?
我知道的一种数据访问的方法是在实现SL的WEB服务使用LINQ数据源作为数据集合,然后再让SL异步获取数据到DataGrid中。
4. 我在访问一些SL网页的时候,发现有的网站分两步下载页面内容。第一步下载主程序集,第二步下载还需要的其它DLL运行库,为什么要分开两步下载呢?
我的理解是:由于主程序集是要更新的,而DLL运行库可以不经常更新甚至永久保存在客户端,所以第一次运行的时候,动态库会下载到本地缓存,下次允许就不会再重新下载了。
思考:ZYHIS的一些常用字典,不会变动的字典是不是可以存在本地缓存或Cookies中,判断客户端文件是否存在,如果没存在自动向服务器发请求下载。如果可以实现,是保存在内存、Cookies还是保存在本地磁盘呢?保存的格式又是怎么样的?
5. SL2.0是如何支持目前比较流行的CSS样式布局和JAVASCRIPT脚本的?
6. SL2.0号称是实现富互联网的强大工具,那么其应该能实现强大的用户界面与后台业务的一个很好的交互性,这种交互性要实现除了反映到用户界面的良好体验之外,还考验着有界面层与业务处理层甚至是业务处理层与数据存储层的交互能力。如果我们采用sl2.0+WCF两者结合目前似乎存在很多不足之处……如不能支持SOAP
三、 使用SL2.0 的一些关于WCF服务问题:
1. 数据传输的安全性问题。
透明度?
2. 如何解决Silverlight-enabled WCF Service 2.0只支持basicHttpBinding绑定服务而存在的种种缺点?如果SL客户端只支持basicHttpBinding那么WCF服务配置是否也只允许使用basicHttpBinding?
basicHttpBinding缺点如下:
basicHttpBinding不支持会话和事务,安全性不高;
basicHttpBinding安全性默认为无效,必须使用BasicHttpSecurityMode枚举;
basicHttpBinding互操作性很弱,它没有提供SOAP的安全性和各种事务支持。
如何解决:
如果安全性方面,跨与用对传输信息进行加密来解决,那事务处理呢?
3. SL2.0中只允许实现异步呼叫WCF Service吗?那呼叫的代码格式是不是统一的可以进行封装?
4. 调试的时候系统会使用不同的端口运行程序,包括WCF服务,那么在Silverlight中是如何实现跨域访问的?(域名一样端口号不一样)
在服务器根目录下添加clientaccesspolicy.xml:
内容是:
=====================
一、 WPF
1. 控件样式的编写
因为编写样式的时候实际的编写效果不能立即体现,样式的元素很多,如何利用好自己所需要的元素来编写样式,编写样式的代码风格是怎么样的?
查看一些经典样式的书写方式,使用一些样式编写软件XAMLPAD等来定义控件样式。
2. 控件数据的绑定
所有控件都有可以绑定数据的依赖属性,可以在XAML代码中绑定数据,也可以在页面C#代码中绑定。用哪种绑定方法比较好?什么时候用页面绑定,什么时候用代码绑定?
3. 页面是否要跳转还是在打开另一个页面的时候动态加载XAML文件实现?跳转页面是否可以传递页面参数,刷新已跳转的页面,该页面的参数是否可以保存?
已实现页面跳转,并且传递参数到新页面初始化事件中,该参数作为新页面的页面静态变量保存。
二、 WCF
1. 接收WCF服务端数据到客户端页面,如果接收比较大数据量的时候总是提示,最大字节数超过65535不能接收的问题,提示说可以更改服务器APP.CONFIG设置,但是改了也没用。是不是用HTTP传输会这样,用TCP/IP传输协议传输不会呢?另外客户端还有一种可以异步调用的方法是否可用?异步操作的优缺点及其应用场合?
2. WCF分为两个部分:
a. 编程模型:即对接口契约的具体代码实现
b. 通信实现:即对整个WCF服务的配置(app.config)
3. WCF安全性方面
a. 数据传输的安全性:(数据传输和序列化)
1. 数据传输:文本(XML)或二进制传输方式的区别?大型数据的传输?数据流模式/异步?如何根据具体项目的情况确定具体实现的WCF绑定模型?
2. 序列化:如何通过 DataContractSerializer 类或 XmlObjectSerializer 类的任何扩展完成数据序列化?
Wcf默认使用DataContractSerializer序列化。
b. WCF服务端的安全性:
如何保证服务器不受不可信任代码或恶意代码的访问和攻击?
三、 LINQ
1. LINQ表达式可以用到的地方有哪些?
LINQ to SQL 、LINQ to XML、LINQ to 实体框架 等等
2. LINQ表达式与SQL语法有那些区别,要如何使用?
=====================
1. 数据契约常用吗?哪些情况要使用到?
接口编程?……
2. WCF直接实现数据库事务的情况多吗?与ADO.NET的事务操作有什么不同?两者都是怎样实现的?
3. 我们需要使用动态配置来控制ORACLE连接池吗?
4. 数据库检索可以使用索引来提高效率,但是在数据检索后往DataTable中填充(Fill)数据有时候很慢是为什么?
=====================
1. C#四舍五入问题
在C#中进行四舍五入的话,不是正常的四舍五入,而是四舍六入五成双;所以如果在程序里面进行四舍五入的话,不能直接用ROUND函数解决,而应该用相应的处理程序或者ToString(“fx”)方法解决。
2. C#中没有带精度的小数类型,而ORACLE数据库有精度,保存到ORACLE中需要把C#中的数据先格式化到相应的小数位吗?
不需要,在保存到ORACLE中程序会做相应的处理,自动先进行四舍五入后保存数据。
3. 在传输大数据流的时候,老是提示我不能超过65535字节,把服务器配置文件中最大接受量设大了也没用,不知道为什么?需要用流操作吗?
4. C#如何锁表,如何避免并发和死锁?
5. 如果相关业务的代码都放在一个程序集或一个类中,在版本控制上经常有一个人检出了,另外一个人不能操作的问题,能不能用分部类来实现这个问题?
=====================
1. WCF服务的寄存方式
WCF服务包括有Windows应用、控制台应用、Windows服务、 IIS 和WAS等。其中各自的特点是什么?而对WAS还比较陌生,它是什么?
WAS 是 Windows (Process) Activation Service 的缩写,是Windows Vista中所新增的一种进程宿主模型。WAS作为 IIS7.0 特有的新增功能,和以前IIS 6.0的功能相比更加强大,因为它提供并支持除HTTP之外的更多协议,比如TCP方式和Pipe(管道)方式。
2. 采用编码方式配置WCF服务和配置文件方式配置WCF服务各自的特点是什么?ZYHIS5会不会采用编码方式配置?
采用配置文件方式配置灵活,不必每次都编译更新发布程序。而采用编码方式多应用于不需IIS服务的应用等。编码方式在调试程序的时候可以用到。
3. WCF的局域网应用和互联网应用有什么区别?对WCF的部署特别是安全方面的部署是怎样的?
局域网处于同一网段,在一个防火墙之内,所以可以使用传输安全TRANSPORT对消息进行保护;而互联网是端对端的,中间可能使用不同的介质进行传播,因此需要更为安全的MESSAGE传输来保障安全。
4. 托管HIS的网络架构特点是什么?如何对其进行安全部署?
a) 托管HIS网络是专用网络,类似局域网。
安全模式:Transport
服务绑定:netTcpBinding
服务端认证:Certificate(X509证书)
客户端认证:Certificate(X509证书)
b) 托管HIS网络是互联网,类似广域网。
安全模式:Message
服务绑定:netTcpBinding/ WSHttpBinding
服务端认证:Certificate(X509证书)
客户端认证:Certificate(X509证书)
5. X509证书的获取问题?
如果使用Certificate(X509证书)认证是确定的事,那该证书是否使用收费的(CA签发的证书)还是在WIN2008中安装证书服务器作一个做一个小型的CA,可以申请签发证书。
20090325
一、 关于is 和 as 的应用
在做两个类型是否兼容检查时,建议使用 as。
原因:is需要做两次对象的类型检查,而as需要做一次对象类型检查,再加一次null的检查,而null检查开销比对象类型检查少。相对as的方法效率高些。
二、 关于using的使用
在操作数据库时,定义连接对象时,尽量使用using。
方法如下:
using(OracleConnection con=new OracleConnection(…..))
{
……..
……….
}
目的:执行完using过程后,对象会自动清理,避免因忘关闭连接,而造成资源浪费。
同理,在需要及时释放对象时都可以使用该方法。如不理解,可网上查一查资料。
三、 一些编码的转换
string类型转成byte[]:
byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str );
反过来,byte[]转成string:
string str = System.Text.Encoding.Default.GetString ( byteArray );
例如:
byte[] byteArray = System.Text.Encoding.ASCII.GetBytes ( str );
string str = System.Text.Encoding.ASCII.GetString ( byteArray );
四、 学习了WCF的错误处理
五、 问题:DataSet序列化时Binary模式和正常的序列化的差异在哪?
=====================
一、 关于is 和 as 的应用
在做两个类型是否兼容检查时,建议使用 as。
原因:is需要做两次对象的类型检查,而as需要做一次对象类型检查,再加一次null的检查,而null检查开销比对象类型检查少。相对as的方法效率高些。
二、 关于using的使用
在操作数据库时,定义连接对象时,尽量使用using。
方法如下:
using(OracleConnection con=new OracleConnection(…..))
{
……..
……….
}
目的:执行完using过程后,对象会自动清理,避免因忘关闭连接,而造成资源浪费。
同理,在需要及时释放对象时都可以使用该方法。如不理解,可网上查一查资料。
三、 一些编码的转换
string类型转成byte[]:
byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str );
反过来,byte[]转成string:
string str = System.Text.Encoding.Default.GetString ( byteArray );
例如:
byte[] byteArray = System.Text.Encoding.ASCII.GetBytes ( str );
string str = System.Text.Encoding.ASCII.GetString ( byteArray );
四、 学习了WCF的错误处理
五、 问题:DataSet序列化时Binary模式和正常的序列化的差异在哪?
=====================
一、 使用OracleDataAdapter时注意:
在使用用OracleDataAdapter时,创建的连接对象要关闭,因为OracleDataAdapter的内部机制会自动打开和关闭连接对象。在使用完连接对象后,会将连接对象重置到使用前的状态。
二、 连接池的最小数
连接池的最小数,在创建第一个连接后,连接池会自动生成最小数的连接对象
1. 为何在下载程序集时,提示”找不到指定的程序集”?
IIS中的执行权限配置成了“脚本和执行程序”而不是“纯脚本”.
2. 数据网络控件是否需要“按快捷键弹出SQL语法” 功能,如何实现?
3. WPF如何实现在应用级捕获所有未处理的异常?
在APP.XAML中绑定DispatcherUnhandledException事件.
4. 异常处理是否需要考虑将“异常提示信息”做成可动态配置的?即可由实施人员来配置提示信息而不要修改代码.
=====================
1. datagrid为何每次查询都会有一新行,如何去除?
using System.ComponentModel;
dataGrid1.ItemsSource = dsFee.Tables[“V_SICK_PRICE_ITEM”].AsDataView();
ICollectionView view = CollectionViewSource.GetDefaultView(dataGrid1.ItemsSource);
(view as IEditableCollectionView).NewItemPlaceholderPosition = NewItemPlaceholderPosition.None;
2. 如何设置datagrid的列的显示格式?
设置StringFormat字符串
3. WPF设计器加载失败?如何处理?
一般是由于代码容错不足引起的,实现不行的话,考虑在代码中判断是在设计模式还是运行模式。
If ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
Return ;
}
4. 将日志记录到事件查看器时,如果日志已满,是否会报错?客户端异常是否有必要做这种日志?是否会影响性能?
5. 为何windowformhost控件 在WPF 浏览器应用程序中无法使用,而在WPF的桌面应用可以?