Silverlight改进总结文档格式.docx
- 文档编号:21247886
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:14
- 大小:99.79KB
Silverlight改进总结文档格式.docx
《Silverlight改进总结文档格式.docx》由会员分享,可在线阅读,更多相关《Silverlight改进总结文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
publicvoidAddError(stringpropName,stringerror)
{
ErrorList[propName]=newList<
ErrorList[propName].Add(error);
if(ErrorsChanged!
=null)
ErrorsChanged(this,newDataErrorsChangedEventArgs(propName));
}
对应的属性和对应的校验提示信息
支持TextBox,ComboBox,DatePicker
3、WCF分页服务访问
定义两个操作契约
//返回二进制的数据表
///<
summary>
///分页获取数据集
///<
/summary>
paramname="
sql"
SQL语句<
/param>
startIndex"
开始索引<
maxCount"
如果是-1则不分页<
parameters"
参数<
isStoredProcedure"
是否存储过程<
returns>
<
/returns>
publicbyte[]ExcuteDataTable(stringsql,intstart,intsize,List<
SqlParameterInfo>
parameters)
{
…
System.Data.DataSetds=ExcuteDataTable(sql,start*size,size,parameters,false);
//记录总的记录数
ds.ExtendedProperties.Add("
RecordCount"
recordCount);
varms=newMemoryStream();
//通过C1.C1Zip进行压缩
using(varsw=newC1.C1Zip.C1ZStreamWriter(ms))
ds.WriteXml(sw,XmlWriteMode.WriteSchema);
//ds.WriteXml(ms,XmlWriteMode.WriteSchema);
//返回XML的字节数组
returnms.ToArray();
}
//更新数据
publicstringUpdateData(byte[]dtAdded,byte[]dtModified,byte[]dtDeleted,stringdataTableName)
//对于不同DataRow
….
UpdateData(dtAdded,DataRowState.Added,transaction);
UpdateData(dtModified,DataRowState.Modified,transaction);
UpdateData(dtDeleted,DataRowState.Deleted,transaction);
transaction.Commit();
….
voidUpdateData(byte[]data,DataRowStatestate,OracleTransactiontrans)
if(data==null)
return;
vards=newDataSet();
varms=newMemoryStream(data);
//通过DataSet的ReadXml方法恢复
ds.ReadXml(ms);
ds.AcceptChanges();
foreach(DataTabledtinds.Tables)
foreach(DataRowdrindt.Rows)
switch(state)
caseDataRowState.Added:
dr.SetAdded();
break;
caseDataRowState.Modified:
dr.SetModified();
caseDataRowState.Deleted:
dr.Delete();
//计算总共有多少条记录
publicintCalculateRecord(stringsql)
{
stringstrCount=string.Format("
selectcount(*)ascofrom{0}"
tableName);
//分页获取数据集
publicSystem.Data.DataSetExcuteDataTable(stringsql,intstartIndex,intmaxCount,List<
parameters,boolisStoredProcedure)
...
adapter.FillSchema(dt,SchemaType.Source);
if(maxCount>
0)
//分页处理
adapter.Fill(ds,startIndex,maxCount,tableName);
else
//做分页
dapter.Fill(ds);
returnds;
4、Silverlight端数据访问
stringsqlSel="
select*from反馈需求记录where编号=:
BH"
;
BasicHttpBindingbinding=newBasicHttpBinding();
EndpointAddressaddress=newEndpointAddress(newUri(Application.Current.Host.Source,"
/WCFDataService.svc"
)
);
binding.MaxReceivedMessageSize=Int32.MaxValue;
binding.MaxBufferSize=Int32.MaxValue;
binding.SendTimeout=TimeSpan.FromMinutes(10);
binding.OpenTimeout=TimeSpan.FromMinutes(10);
binding.ReceiveTimeout=TimeSpan.FromMinutes(10);
List<
ZLBH.SL.App.WCFDataServiceRef.SqlParameterInfo>
sqlParas=newList<
ZLBH.SL.App.WCFDataServiceRef.SqlParameterInfosqlParaItem=newZLBH.SL.App.WCFDataServiceRef.SqlParameterInfo();
sqlParaItem.ParameterName="
sqlParaItem.ParameterType=BizFieldType.文本;
sqlParaItem.ParameterValue=bh;
sqlParas.Add(sqlParaItem);
WCFDataServiceRef.WCFDataServiceClientdetailclient=newWCFDataServiceRef.WCFDataServiceClient(binding,address);
detailclient.ExcuteDataTableCompleted+=
delegate(objects,WCFDataServiceRef.ExcuteDataTableCompletedEventArgse)
if(e.Error==null)
varms=newMemoryStream(e.Result);
DataTabledt=newDataTable();
DataSet_ds=newDataSet();
//解压缩
using(varzr=newC1.C1Zip.C1ZStreamReader(ms))
_ds.ReadXml(zr);
dt=_ds.Tables[0];
//绑定到DataGridView上
this.DetailTab.DataContext=dt.DefaultView.Table.Select().First<
DataRow>
().GetRowView();
};
detailclient.ExcuteDataTableAsync(sqlSel,0,-1,sqlParas.ToArray());
///绑定分页
pageIndex"
当前页索引<
pageSize"
分页大小<
pager"
分页控件<
selCol"
是否有选择列<
grid"
要绑定的DataGrid<
privatevoidBindGrid(stringsql,intpageIndex,intpageSize,DataPagerpager,boolselCol,Controlgrid,ZLBH.SL.App.WCFDataServiceRef.SqlParameterInfo[]parameters)
varms=newMemoryStream(e.Result);
if(pager!
if(pager.PageIndex<
=0)
objectrecordcount;
//获得总的行数
_ds.ExtendedProperties.TryGetValue("
outrecordcount);
pager.BindSource(Convert.ToInt16(recordcount),10);
//绑定到DataPager的PageIndex事件
pager.PageIndexChanged-=(s1,e1)=>
BindGrid(sql,pager.PageIndex,pageSize,pager,selCol,grid,parameters);
pager.PageIndexChanged+=(s1,e1)=>
if(selCol)
dt.DefaultView.Table.Columns.Add("
选择"
typeof(bool));
5、Silverlight端数据更新
select*from反馈需求记录where1=2"
WCFDataServiceRef.WCFDataServiceClientdetailclient=newWCFDataServiceRef.WCFDataServiceClient(binding,address);
//获取一个空的数据表结构
dt.TableName="
反馈需求记录"
DataRownewRow=dt.NewRow();
DataRowViewrowView=(DataRowView)newRow.GetRowView();
rowView.SetData("
ID"
Guid.NewGuid().ToString());
….
附件"
fjbyte);
dt.Rows.Add(newRow);
_ds.Tables.Clear();
_ds.Tables.Add(dt);
//获得相应DataRowState的记录的字节数组值
byte[]dtAdded=GetChanges(_ds,DataRowState.Added);
byte[]dtModified=GetChanges(_ds,DataRowState.Modified);
byte[]dtDeleted=GetChanges(_ds,DataRowState.Deleted);
WCFDataServiceRef.WCFDataServiceClientupdateClient=newWCFDataServiceRef.WCFDataServiceClient(binding,address);
updateClient.UpdateDataAsync(dtAdded,dtModified,dtDeleted,_ds.Tables[0].TableName);
updateClient.UpdateDataCompleted+=newEventHandler<
UpdateDataCompletedEventArgs>
(updateClient_UpdateDataCompleted);
6、IIS配置支持Silverlight
在IIS6.0中,允许ASP.NETV4.0Web服务扩展
注册ASP.NET
如果ASP.NET没有注册到IIS,在FrameWork4.0目录下运行
Aspnet_regiis.exe–i
增加对XAP和XAML文件的支持
在新建网站的HTTP选项中,选择添加“MIME类型”
加入.xaml、.xap、.xbap扩展名
.xapapplication/x-silverlight-app
.xamlapplication/xaml+xml
.xbapapplication/x-ms-xbap
允许匿名访问
选择Internet来宾账户
7、IIS配置支持WCF
在FrameWork4.0目录下运行ServiceModelReg.exe-ia
8、WCF配置文件设置
启动IIS,通过WcfTestClient.exe测试调用服务,或者通过http:
//webSite/WCF服务.svc访问测试获取MetaData元数据进行测试。
开启MetaData交换
配置服务交换ServerBehavior
HttpGetBinding=webHttpBinding
HttpGetEnabled=True
HttpGetUrl=http:
//192.168.0.160:
10091/
配置服务的BehaviorConfiguration
配置服务的MexConfiguration,使得Service具备MetaData交互协议
服务配置,注意:
Address必须为带域名的地址
9、WebApplication发布到IIS
在IIS中新建一个网站,然后直接通过publishWeb发布到IIS网站目录下
10、关于EMF框架
MEF是ManagedExtensiblityFrameWork的简称,他可以很容易的构造可扩展性的应用程序。
MEF提供了发现和组合能力,因此你可以选择来加载插件。
MEF存在于.NET4.0的System.ComponentModel.Composition命名空间。
MEF提供一种在运行时通过插件进行扩展的方案,MEF通过标签来暴露及引入,扩展可以依赖另一个扩展,MEF保证它们以正确的顺序被同时装配起来,MEF允许在查询和筛选中使用额外的元数据来标记扩展。
工作原理:
MEF的核心由一个catalog(目录)和一个CompositionContainer组成。
一个catalog负责查找扩展,container负责协调创建和符合的依赖。
MEF主要的组成部分是ComposablePart,一个Part提供一个或多个Exports,同时也依赖多个Imports。
建立MEF的顺序
●创建宿主类
●增加Compose()方法,创建Container实例,然后组装
Varcontainer=newCompositionContainer();
Container.ComposeParts(this);
●定义一个或多个Exports
PublicinterfaceIMessageSender
VoidSend(stringmessage);
[Export(typeof(IMessageSender))]
PublicclassEmailSender:
IMessageSender
PublicvoidSend(stringmessage)
Console.WriteLine(message);
●给宿主类增加属性,并用Import标记
[Import]
PublicIMessageSenderMessageSender{get;
set;
●增加Part到Container中,有两种方法,一种是直接增加ComposablePart的实例,另一种,是使用Catalog。
1.直接增加Composablepart实例
Container.ComposeParts(this,newEmailSender());
2.使用AssemblyCatalog
varcatalog=newAssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());
varcontainer=newCompositionContainer(catalog);
container.ComposeParts(this);
基于MetaData的Export
使用ExportMesataDataAttribute实现Medata元数据
[ExportMetadata("
transport"
smtp"
)]
secure"
null)]
publicclassSecureEmailSender:
IMessageSender
publicvoidSend(stringmessage)
[ImportMany]
publicLazy<
IMessageSender,IMessageSenderCapabilities>
[]Senders{get;
set;
publicvoidSendNotification()
foreach(varsenderinSenders)
if(sender.Metadata.ContainsKey("
Transport"
)&
&
sender.Metadata["
]==MessageTransport.Smtp&
sender.Metadata.ContainsKey("
Issecure"
Metadata["
IsSecure"
]==true)
varmessageSender=sender.Value;
messageSender.Send("
Serverisfine"
CompositionCo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Silverlight 改进 总结