导航:首页 > 净水问答 > wcf过滤器

wcf过滤器

发布时间:2022-01-06 01:39:16

❶ 如何在应用系统中实现数据权限的控制功能

1、权限系统的控制
刚才说到,对数据进行控制最好通过弹性的方式,在一个系统里面或者功能模块里面对用户角色或者岗位进行设置,一般权限控制默认在一个权限管理系统模块进行设定,数据权限也应该如此。
权限系统除了可以对用户能操作那些功能进行限定,也还可以对其访问那些组织机构的数据进行限定,我们通过权限系统,把这些权限控制的数据进行保存,在应用系统模块里面进行整合即可,根据角色拥有的数据权限,授予用户对其他部门或者机构的数据进行访问。如下面是我权限系统模块里面对角色权限的设置操作。
1)对角色功能权限进行设置

2)对角色数据权限进行控制

当对角色的数据权限进行保存后,我们就可以把这个角色能够访问的组织机构(公司、部门、工作组等等)进行记录起来了。
2)应用系统的集成,实现数据权限的控制
如我的一个病人资料应用系统,客户要求就是基于互联网的应用系统,因此使用WCF数据通讯模式实现数据的集中管理,而且他们要基于医院单位的数据管理模式,也就是每个单位管理各自的数据,我们可以把不同的医院单位作为不同的公司性质来区分,这样在权限模块中进行设置即可。
1)在应用程序中,通过在程序头部,让可以管理多个医院机构的用户选择管理的数据访问,即可实现不同的数据区分管理。

2)当用户在上面切换不同的机构,所有存在的界面数据全部实现刷新,如打开了很多界面,那么这些界面的数据也随之更新为对应新的机构下的数据。
了解了上面大致的需求,我们应该如何通过整合权限管理系统实现在应用系统的数据权限控制和集成呢?
首先我们需要在用户登陆的时候,获取对应用户的数据权限内容,然后把它转化为我们需要的信息,如下代码所示。

//判断如果用户管理的公司数据多于两个,那么就显示选择单位列表,并绑定公司数据
List<RoleDataInfo> roleDataList = CallerFactory<IRoleDataService>.Instance.FindByUser(info.ID);
List<int> companyList = new List<int>();
foreach (RoleDataInfo roleDataInfo in roleDataList)
{
if (!string.IsNullOrEmpty(roleDataInfo.BelongCompanys))
{
string[] companyArray = roleDataInfo.BelongCompanys.Split(',');
foreach (string company in companyArray)
{
if (!string.IsNullOrEmpty(company) && ValidateUtil.IsNumber(company.Trim()))
{
if (!companyList.Contains(company.ToInt32()))
{
companyList.Add(company.ToInt32());
}
}
}
}
}
Portal.gc.CompanyList = companyList;

//设置选定的公司ID
Cache.Instance["SelectedCompanyID"] = info.Company_ID;
//设置过滤条件给界面基类使用
Cache.Instance["DataFilterCondition"] = string.Format(" (Company_ID is null OR Company_ID = '{0}')", info.Company_ID);

其中CallerFactory方式调用,是以WCF的方式获取对应的数据库数据。在上面代码里面,有一个RoleDataInfo的实体类,这个就是用来承载用户角色的数据权限数据,其中包括了
BelongCompanys(所属公司)和 BelongDepts(所属部门 )的属性,我们把它解析为我需要的数据List<int> companyList 、 SelectedCompanyID 和 DataFilterCondition,当然如果有部门的控制,可以做的更多,我这里仅仅以医院机构进行区分即可。
SelectedCompanyID 就是用户选择查看的组织机构ID,DataFilterCondition就是用来构建一个数据过滤脚本,对用户看到的数据进行一个过滤筛选作用。我们把这两个数据内容,放到Winform的缓存里面,如果是Web可以用Session代替,这样可以在多个模块或者界面中方便访问使用。
为了实现用户选择不同的机构,所有打开的窗体数据实现相应的更新,那么我们需要处理公司选择的操作,具体实现代码如下所示。

private void txtCompany_EditValueChanged(object sender, EventArgs e)
{
//如果用户选择公司,以选择为主,否则以当前客户所在公司
if (this.txtCompany.EditValue != null)
{
CListItem item = this.txtCompany.EditValue as CListItem;
if (item != null)
{
//设置选定的公司ID
Cache.Instance["SelectedCompanyID"] = item.Value;
SetSelectedCompanyName();

//设置过滤条件给界面基类使用
string condition = string.Format(" Company_ID = '{0}'", item.Value);
Cache.Instance["DataFilterCondition"] = condition;

//遍历全部窗口,更新
foreach (WHC.Framework.BaseUI.BaseDock form in this.MdiChildren)
{
form.SelectedCompanyID = item.Value;
form.DataFilterCondition = condition;
form.FormOnLoad();
}

string message = string.Format("您已经切换数据显示:{0}", item.Text);
MessageDxUtil.ShowTips(message);
}
}
}

上面是对所有打开的窗体,传递了对应的信息,然后进行了刷新。那么我们在看看窗体本身内部的数据显示逻辑是如何的。
我们以病人资料的查询界面为例,根据不同的输入条件,对数据进行不同查询外,还增加了一个对组织机构过滤的条件,如下所示。

/// <summary>
/// 根据查询条件构造查询语句
/// </summary>
private string GetConditionSql()
{
//如果存在高级查询对象信息,则使用高级查询条件,否则使用主表条件查询
SearchCondition condition = advanceCondition;
if (condition == null)
{
condition = new SearchCondition();
condition.AddCondition("BedNo", this.txtBedNo.Text.Trim(), SqlOperator.Like);
condition.AddCondition("TumorPart", this.txtTumorPart.Text.Trim(), SqlOperator.Like);
........................
condition.AddDateCondition("InDate", this.txtInDate, this.txtInDateEnd);
condition.AddDateCondition("LeaveDate", this.txtLeaveDate, this.txtLeaveDateEnd);if (this.chkHasReferral.Checked)
{
condition.AddCondition("HasReferral", "是", SqlOperator.Equal, true);
}
...................
}

string where = condition.BuildConditionSql().Replace("Where", "");

//如果公司过滤条件不为空,那么需要进行过滤
if (!string.IsNullOrEmpty(this.DataFilterCondition))
{
where += string.Format(" AND {0}", this.DataFilterCondition);
}

return where;
}

/// <summary>
/// 绑定列表数据
/// </summary>
private void BindData()
{
//entity
this.winGridViewPager1.DisplayColumns = "HandNo,BedNo,MidVideo,Name,Sex,IdentityCard,Age,Birthday,HospitalNo,IDNumber,InDate,InDiagnosis,SurgeryDate,DirectorSurgeon,LeaveDate,TumorPart,LeaveDiagnosis,IsFirstTime,LeaveSpecimens,OuterFilm,PreMRI,PreCT,PrePicture,MidPathology,AfterCTMRI,AfterPicture,AfterVideo,LeavePicture,Endocrine,Professor,Address,Telephone,HasReferral,ReferralDate,ReferralTime,Pathology,Note,Report";
this.winGridViewPager1.ColumnNameAlias = CallerFactory<IPatientService>.Instance.GetColumnNameAlias();//字段列显示名称转义

string where = GetConditionSql();
PagerInfo pagerInfo = this.winGridViewPager1.PagerInfo;
List<PatientInfo> list = CallerFactory<IPatientService>.Instance.FindWithPager(where, ref pagerInfo);
this.winGridViewPager1.DataSource = new WHC.Pager.WinControl.SortableBindingList<PatientInfo>(list);
this.winGridViewPager1.PrintTitle = "病人基本资料信息报表";
}

以上绑定代码实现了:分页、条件查询、高级查询、字段列表显示、中文名称转义,以及最重要的,根据公司条件进行数据过滤的操作,从而让用户只能管理自己的数据。

❷ svc是什么意思

SVC是Switching Virtual Circuit的缩写,意思是交换虚拟电路。信息包交换虚拟线路(节点之间只在需要传送数据时才建立逻辑连结) 面向连接的网络中,从一台计算机到另一台计算机的连接。SVC是虚拟的,因为路径是从路由表中得到的,而不是建立物理线路。SVC是交换的,因为它能按需要建立,类似于一次电话呼叫。

2.SVC:(Supervisor)操作系统保护模式,处理软件中断(SWI)
3.SVC(Static Var Compensator):静止无功补偿器。静止无功补偿器是由晶闸管所控制投切电抗器和电容器组成,由于晶闸管对于控制信号反应极为迅速,而且通断次数也可以不受限制。当电压变化时静止补偿器能快速、平滑地调节,以满足动态无功补偿的需要,同时还能做到分相补偿;对于三相不平衡负荷及冲击负荷有较强的适应性;但由于晶闸管控制对电抗器的投切过程中会产生高次谐波,为此需加装专门的滤波器。
IBM SAN Volume Controller
对于存储虚拟化,IBM SAN Volume Controller(SVC)能够将多个磁盘系统的容量整合为一个单一的“容量池”。SVC 可帮助节省空间和能源,并能通过合并来简化存储资产的管理,这将极大地提高现有存储器的利用率,并减少额外的存储需求。
4. SVC=Scalable Video Coding,中文译作可伸缩视频编码或可扩展视频编码,是视频编码的一种技术。其又可以细分为时域可伸缩性、空域可伸缩性和质量可伸缩性。SVC是H.264/AVC标准的一个重要的扩展。
5.SVC(Super Visor Call)为指令码,表明是访管指令;n为访管中断号,其值是一整数,具体表示何种访问要求.当中断发生时,硬件中断装置将访管中断号n送入旧的程序状态字内的中断码字段,访管中断总控程序由系统堆栈中将其取出,并据此转入对应的服务程序.
在实际使用时,用户程序与操作系统之间还需要相互传递参数和返回值.如此,用户使用访管指令的一般形式为:
准备参数
SVC n
取返回值 ②
根据具体访管要求约定,参数及返回值可以通过寄存器传递,也可以通过内存传递.对于后者,操作系统必须能够访问进程空间.
通常将②称为系统调用命令,它除访管指令外,还有准备参数和取返回值.为了使用方便,在高级语言中一般将其写为同过程调用相类似的形式,即
返回值=系统调用名称(参数1,参数2,…,参数m); ③
当然,编译程序会将③翻译成形如②的形式.其中系统调用名称对应①,不同的系统调用名称对应不同的整数n.在有些书中,也将③称为代表②的宏指令或广义指令
.
SVC高压动态无功补偿及滤波装置简介]
基于DSP的全数字控制系统,具有运算速度快、处理数据量大,实现实时控制量计算。
采用柜式结构,实现外来干扰屏蔽,抗干扰能力优越。
控制整个系统的运行。
采用卧式结构,晶闸管叠装压接式,纯水冷却、内取能、内阻尼、空气绝缘、BOD保护。
晶闸管选用ABB优质产品,电气性能良好,串联使用控制电抗器的投入与切除。
主电抗器,通过晶闸管阀组连接到SVC系统中,成为SVC最重要的部分。
电抗器为空心、干式、铜线或铝线环氧固化型,线形度高、噪音小、动热稳定性好,绝缘强度高,散热好。
通过晶闸管的相位控制达到动态无功补偿的目的。
主要设备采用国外著名公司进口元件,主循环泵、等离子交换机、精密过滤器等核心机构采用不锈钢316L材质。
PLC程序控制,保护、报警功能完备。
无腐蚀,无污染,符合环保要求。
.svc文件
每一个.NET Web服务都具有一个.asmx文本文件,客户端通过访问.asmx文件实现对相应Web服务的调用。与之类似,每个WCF服务也具有一个对应的文本文件,其文件扩展名为.svc。基于IIS的服务寄宿要求相应的WCF服务具有相应的.svc文件,.svc文件部署于IIS站点中,对WCF服务的调用体现在对.svc文件的访问上。.svc文件的内容很简单,仅仅包含一个ServiceHost指令(Directive),该指令具有一个必须的Service属性和一些可选的属性。所以最简单的.svc仅仅具有一个包含Service属性(该属性指明了相应的WCF服务的有效类型)的ServiceHost指令。

!应该没错哦!

❸ 常用的组态软件都有哪些 分别是那些公司的

一、Wonderware公司:Wonderware公司成立于1987年,是世界上首家推出组态软件的公司。该公司推出的组态软件名为Intouch,其广泛应用于可视化和控制工业生产过程。该组态软件大大的优化了工程师的自动化应用过程。

二、西门子(中国)有限公司:SIMATIC WinCC(Windows Control Center)--视窗控制中心,西门子最经典的过程监视系统。作为西门子TIA(全集成自动化)理念中的关键组成之一,实现了自动化系统与IT系统之间的互联互通。

三、艾斯本技术有限公司:该公司的常用组态软件名为AspenTech,AspenTech通过优化资产来更快地,更环保,更长,更快地加速用户所服务行业的数字化转型。

四、PROGEA公司:PROGEA公司的常用组态软件名为MOVICON,Movicon是全新的第三代(Scada/HMI)工业监控软件。Movicon以坚持简单、开放、可扩充性作为标准,实现自动化转型。

五、Intellution公司:该公司旗下的组态软件iFIX,能有效的加速操作员响应并提高效率。该软件借助全新的图形引擎,iFIX可实现可视化。利用完全刷新的工作空间,其功能包括图像形状的抗锯齿,历史数据的延时回放,更新的带状条和菜单选项,高性能图形等。

❹ .NETFramework3.5开发技术详解的目录

第1章.NETFramework3.5简介1
1.1.NETFramework3.5在.NET技术体系中的位置1
1.2.NET3.5各部分的功能2
1.3.NET3.5的组件3
1.3.1WindowsPresentaionFoundation(WPF)3
1.3.(WCF)5
1.3.3WorkflowFoundation(WF)6
1.4搭建.NET3.5的开发环境6
1.4.1在WindowsXP/2003/Vista上搭建开发环境6
1.4.2相关工具9
第2章.NET3.5的新功能12
2.1.NET3.5概要12
2.2新的.NET基础类型12
2.3C#语言的强化14
2.3.1C#基本语法增强14
2.3.2LINQ(集成语言查询)16
第3章WindowsPresentationFoundation基础知识34
3.(WPF)的概念34
3.2XAML的概念35
3.2.1命名空间36
3.2.2代码后置文件37
3.2.3调用.NET类库中的类来定义对象37
3.2.4属性38
3.3WPF的结构和相关的类库39
3.4WPF应用程序的类型44
3.4.1传统类型的视窗程序44
3.5创建第一个WPF程序49
第4章WPF程序的布局59
4.1布局的基础知识59
4.2StackPanel容器61
4.3DockPanel容器65
4.4Grid容器67
4.4.1表格的高度和宽度69
4.4.2ColumnSpan和RowSpan70
4.4.3Grid的SharedSizeGroup71
4.5Canvas容器72
4.6文档布局74
4.6.1WrapPanel74
4.6.2TextBlock75
4.6.3FlowDocument78
4.7其他容器83
4.8视图控制84
4.9自定义布局87
第5章WPF的控件91
5.1控件模型91
5.2WPF的控件树92
5.3路由事件95
5.4从属属性(DependencyProperty)97
5.5处理交互行为102
5.6基本控件的使用106
5.6.1Button控件106
5.6.2TextBox类控件109
5.6.3列表控件113
5.6.4Menu控件118
5.6.5包容式控件121
5.6.6Label和TextBlock126
5.6.7其他控件127
第6章资源和数据绑定134
6.1在WPF中定义资源134
6.1.1WPF中的嵌入式资源134
6.1.2定义逻辑资源135
6.2使用资源139
6.3数据绑定基础142
6.4集合的绑定151
6.5DataProvider157
6.6高级数据绑定操作165
6.7使用CollectionViewSource进行排序和过滤167
第7章让WPF程序支持样式和主题169
7.1样式基础169
7.1.1WPF样式的定义169
7.1.2样式的作用170
7.1.3样式的作用范围171
7.2内联样式172
7.3命名样式172
7.4样式触发器174
7.5控件模板180
7.6主题182
第8章WPF的绘图功能189
8.12D图形基础189
8.22D几何图形190
8.3画刷和画笔197
8.3.1画刷197
8.3.2画笔204
8.42D图形变换(Transform)205
8.4.1平移变换205
8.4.2缩放变换206
8.4.3旋转变换206
8.4.4斜移变换207
8.4.5矩阵变换207
8.4.6变换组(TransformGroup)210
8.52D图形特效210
8.63D图形基础213
8.6.1计算机图形学基础213
8.6.2WPF的3D类型215
8.73D变换218
8.8WPF的动画支持221
8.8.1Animation对象222
8.8.2第一个动画223
第9章WPF的多媒体230
9.1对视频和音频的支持230
9.1.1视频支持230
9.1.2音频支持235
9.2语音功能238
第10章WPF高级技术241
10.1WPF自定义控件241
10.1.1编写控件的基础知识241
10.1.2开始编写控件244
10.1.3编写CustomControl控件249
10.2WPF的互操作性252
10.2.1在WPF中使用Winform控件252
10.2.2在WInform程序中使用WPF控件254
10.3WPF的异步模型254
10.4WPF对自动化程序的支持256
10.4.1Automation树256
10.4.2控件的访问方式257
第11章(WCF)基础261
11.1面向服务编程模型(框架)261
11.1.1什么是SOA261
11.1.2为什么要使用SOA263
11.2WCF是什么264
11.3WCF的结构265
11.4WCF基础267
第12章WCF中的契约268
12.1服务契约和操作契约268
12.2数据契约(DataContract)269
12.3错误契约(FaultContract)272
12.4创建WCF服务273
12.5编写WCF客户端277
12.6配置WCF程序279
12.6.1服务端配置279
12.6.2客户端配置283
12.6.3配置工具284
第13章WCF中的消息交换285
13.1与通信有关的概念285
13.1.1Address(地址)285
13.1.2Bindings(通信绑定)286
13.1.3Contracts(契约)288
13.1.4EndPoint292
13.2远程对象的传递293
13.3大对象的传递299
13.4错误处理303
13.5会话管理308
13.6双向通信311
13.7WCF的消息编码318
13.8基于队列的消息交换319
13.9点对点网络(Peer-To-PeerNetwork)322
第14章并发管理327
14.1服务器实例行为管理327
14.2并发管理330
14.3同步上下文332
14.4回调的同步设置和异步调用334
第15章WCF的事务支持341
15.1事务概要341
15.2WCF中的事务343
15.3创建支持事务的服务345
第16章WCF的安全解决方案353
16.1认证和授权353
16.1.1认证354
16.1.2授权355
16.2安全传输360
16.2.1传输的安全性360
16.2.2消息安全363
16.3安全策略364
第17章WCF的扩展性368
17.1服务行为的扩展368
17.1.1自定义分发器特性369
17.2自定义通道374
17.3自定义元数据378
17.3.1元数据的基本知识378
17.3.2扩展元数据系统379
17.4自定义序列化380
第18章WCF的运行环境383
18.1在IIS上启用WCF服务383
18.2在.NET程序中运行WCF服务386
18.3在Windows服务程序中运行WCF服务387
第19章工作流(WorkFlow)392
19.1工作流(WF)简介392
19.1.1工作流的概念392
19.1.2WindowsWorkFlowFoundation393
19.2Activity(活动)396
19.3WF运行时401
19.4基于状态机的工作流405
19.5工作流的持久化406
19.6工作流的XAML表示407
……

❺ C#的主要用途有什么

C#只是一种语言,不能做什么,关键是它是基于.NET框架,才是它的用途。所以,你不应该问C#的主要用途有什么,而应该问.NET的用途有哪些。
概括地讲,.NET有以下用途:
一、客户端应用程序
1、Windows Forms,不用我介绍了,对传统Win32应用程序的封装和增强,编写应用程序较为方便,省去了传统Win32应用程序的编写WinMain函数的繁杂步骤。
2、可以调用平台API和COM组件,即通常说的P/Invoke。
3、WPF具有强大的界面展示功能,能提供优秀而灵活的用户体验,取代传统的GDI+图形机制,采用全新的与像素,分辨率无关的计算方式。丰富的控件模型和图形库,多媒体处理以及动画。
二、Web应用。
1、ASP.NET,不用我说了。
2、Silverlight丰富的浏览器应用,HTML5也不能比。
3、较高的安全机制,自动过滤注入和跨站等攻击行为,全自动的用户会话验证机制,本地连接加密。
4、强大的Web服务。
5、WCF,远程技术的替代品,相当强大,完美实现分布式应用。
三、数据处理有着很好的模型与框架,灵活多变的数据库管理模式,可用于XML,SQL等,功能强大的Linq。
四、移动平台,将WPF的各种优点进行移植,可以达到很好的用户体验,真实而流畅的动画效果。
五、支持多处理器多核的异步任务模型(Task),多个异步任务之间可以自由调控,可以自行安排各个线程的执行顺序。
六、云API的支持。
……
剩下的,你自己研究。

❻ 如何自定义datagrid的header

具体实现的过程:

第一步,我们要做一个新的ColumnHeader。这里直接用来silverlight.net上一位高手的代码,并且做了扩展,主要是添加了Header的点击事件和过滤框的事件,
以及一个新的属性用来保存字段名。应为在实际的项目中,我们不可能在Grid上直接显示数据库的字段名,而是要用中文来显示。代码不是太复杂,就不做解释了。
GridHeader.cs

1 [TemplatePart(Name = GridHeader.HeaderTextElement, Type = typeof(FrameworkElement))]
2 [TemplatePart(Name = GridHeader.FilterTextElement, Type = typeof(TextBox))]
3 public class GridHeader : Control
4 {
5 public delegate void HeaderClickEvent(string fieldname);
6 public event HeaderClickEvent OnSort;
7
8 public delegate void FilterTextEvent(string fieldname, string filtertext);
9 public event FilterTextEvent OnFilter;
10
11 protected const string HeaderTextElement = "btnHeaderText";
12 protected const string FilterTextElement = "txtFilerText";
13
14 Button btn_header;
15 TextBox filterText;
16
17 #region Constructor
18 public GridHeader()
19 {
20 this.DefaultStyleKey = typeof(GridHeader);
21 }
22 #endregion
23
24 #region HeaderText
25 /// <summary>
26 /// Identifies the HeaderText dependency property.
27 /// </summary>
28 public static readonly DependencyProperty HeaderTextProperty = DependencyProperty.Register("HeaderText", typeof(string), typeof(GridHeader), null);
29
30 /// <summary>
31 /// Gets or sets the HeaderText possible Value of the int object.
32 /// </summary>
33 public string HeaderText
34 {
35 get { return (string)GetValue(HeaderTextProperty); }
36 set { SetValue(HeaderTextProperty, value); }
37 }
38 #endregion HeaderText
39
40 #region FilterText
41
42 /// <summary>
43 /// Identifies the FilterText dependency property.
44 /// </summary>
45 public static readonly DependencyProperty FilterTextProperty = DependencyProperty.Register("FilterText", typeof(string), typeof(GridHeader), null);
46
47 /// <summary>
48 /// Gets or sets the FilterText possible Value of the string object.
49 /// </summary>
50 public string FilterText
51 {
52 get { return (string)GetValue(FilterTextProperty); }
53 set { SetValue(FilterTextProperty, value); }
54 }
55 #endregion FilterText
56
57 #region FieldText
58 public static DependencyProperty FieldTextProperty = DependencyProperty.Register("FieldText", typeof(string), typeof(GridHeader), null);
59 public string FieldText
60 {
61 get { return (string)GetValue(FieldTextProperty); }
62 set { SetValue(FieldTextProperty, value); }
63 }
64
65 #endregion
66
67 public override void OnApplyTemplate()
68 {
69 base.OnApplyTemplate();
70 StackPanel sp = this.GetTemplateChild("LayoutRoot") as StackPanel;
71
72 btn_header = sp.Children[0] as Button;
73 filterText = sp.Children[1] as TextBox;
74
75 if (this.filterText != null)
76 this.filterText.LostFocus += new RoutedEventHandler(filterText_LostFocus);
77 if (this.btn_header != null)
78 this.btn_header.Click += new RoutedEventHandler(header_Click);
79 }
80
81 void header_Click(object sender, RoutedEventArgs e)
82 {
83 OnSort(FieldText);
84 }
85
86 void filterText_LostFocus(object sender, RoutedEventArgs e)
87 {
88 OnFilter(FieldText, filterText.Text.Trim());
89 }
90

第二步,在Themes下添加一个Generic.xaml,内容如下:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:SilverlightDemoApp;assembly=SilverlightDemoApp">
<Style TargetType="controls:GridHeader">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="controls:GridHeader">
<StackPanel x:Name="LayoutRoot" Background="{TemplateBinding Background}">
<Button x:Name="btnHeaderText" Margin="0" BorderThickness="0" Content="{TemplateBinding HeaderText}"></Button>
<TextBox x:Name="txtFilterTextBox" Margin="1,0,1,1" Text="{TemplateBinding FilterText}"/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary

这里定义了我们自定义的ColumnHeader的展现方式,包括用了一个Button和TextBox。

关于Generic.xaml我不是太明白这个文件,有些人说会自动产生这个文件,但是我的机器上并没有这个文件,我是手工添加的,现建一个themes下建一个 SilverLight用户控件,然后用上面的内容替换掉自动生成的内容,并且去掉Generic.xaml.cs的public Generic()里面的代码。

第三步,在DataGrid页面上添加Resources。如下:

<UserControl.Resources>
<Style x:Key="grid-header" TargetType="primitives:DataGridColumnHeader">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<my:GridHeader HeaderText="{TemplateBinding Content}" Height="Auto" Loaded="GridHeader_Loaded" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources

注意,要在文件头部加上
xmlns:my="clr-namespace:SilverlightDemoApp;assembly=SilverlightDemoApp"
就是这个my:GridHeader的namespace和assembly信息。不然就找不到my:GridHeader的了。

第四步,实现DataGrid所在页面的代码。

基础的代码可以见我的前一篇文档。
Silverlight学习笔记二:DataGrid 服务器端分页、排序的实现

Silverlight学习笔记二(续)
这里主要写一下修改的地方
xaml中的DataGrid部分。

Code

在获取数据之后,对DataGrid的Header进行了处理。新增了CreateHeader()这个方法。

1 private void client_GetProctsPagingCompleted(object sender, e)
2 {
3 if (e.Error == null)
4 {
5 procts_list = e.Result.ToList();
6 dgData.ItemsSource = procts_list;
7 if (pager == null)
8 {
9 pager = new Pager(e.TotalPage, 2);
10 pager.Click += new Pager.PagerButtonClick(pager_Click);
11 pager.PageIndex = 1;
12 spPager.Children.Clear();
13 spPager.Children.Add(pager);
14 //第一次时创建GridHeader
15 CreateHeader();
16 }
17 }
18 else
19 MessageBox.Show(e.Error.Message);
20 canvas.Visibility = Visibility.Collapsed;
21 }
22
23 //用来存储HeaderText和数据库字段之间的对照信息
24 Dictionary<string, string> FieldDict = new Dictionary<string, string>();
25 private void CreateHeader()
26 {
27 var v = from p in dgData.Columns
28 where p is DataGridBoundColumn
29 select p;
30 foreach (DataGridBoundColumn column in v.ToList())
31 {
32 string fieldname = column.Binding.Path.Path;
33 Style style_header = Resources["grid-header"] as Style;
34 column.HeaderStyle = style_header;
35
36 //本来这里我是希望可以直接设置Header的FieldText为字段名的,但是却找不到什么好的方法,
37 //
38 //<my:GridHeader HeaderText="{TemplateBinding Content}" Height="Auto" Loaded="GridHeader_Loaded" />
39 //Resources中这里也不能直接绑定FieldText为Binding.Path.Path,因为这里是从DataGridColumnHeader来的,
40 //DataGridColumnHeader只有Content,而找不到对应的绑定信息。
41 //
42 //另外,通过访问Style的Setter,我也只能获取到ControlTemplate,但是ControlTemplate下面的内容,也就是my:GridHeader取怎么也获取不到,
43 //如果有高人知道,请指教一下。谢谢
44 //
45 //所以,没办法,只能暂时把字段名和HeaderText都保存到Dictionary里面,供后面使用
46
47 FieldDict.Add(column.Header.ToString(), fieldname);
48 }
49 }
50
51 private void GridHeader_Loaded(object sender, RoutedEventArgs e)
52 {
53 GridHeader header = sender as GridHeader;
54 header.OnFilter += new GridHeader.FilterTextEvent(header_OnFilter);
55 header.OnSort += new GridHeader.HeaderClickEvent(header_OnSort);
56 string fieldtext;
57 //在这里,我们对Header的FieldText设置为字段名。
58 //如果能在这里获取到当前的Column的话,前面就不要用Dictionary了,但是这里我仍然不知道该怎么获取到当前的Column。
59 if (FieldDict.TryGetValue(header.HeaderText, out fieldtext))
60 header.FieldText = fieldtext;
61 }
62
63 void header_OnSort(string fieldname)
64 {
65 //这里具体的代码就不写了。
66 //在获取到字段名之后,对数据进行排序。
67 MessageBox.Show("对字段:" + fieldname + "进行排序");
68 }
69
70 void header_OnFilter(string fieldname, string filtertext)
71 {
72 //这里具体的代码就不写了。
73 //在获取到字段名和关键字只有,就可以通过WCF获取到指定的数据了。
74 MessageBox.Show("对字段:" + fieldname + " 按照 " + filtertext + " 进行过滤");
75 }

❼ svc是什么意思

SVC是Switching Virtual Circuit的缩写,意思是交换虚拟电路。

Svc在通信中也是个极其重要的东西,那就是可伸缩视频编码技术,这是一种视频通话里具有变革意义的技术。

可能一开始,svc技术不被人们认可,认为它只不过是一种编码,而且还会出现错误。但是随着时间的推移和svc技术的发展,这种技术在视频编码中越来越重要。

(7)wcf过滤器扩展阅读

作用:高压静止无功补偿装置

静止无功补偿器是由晶闸管所控制投切电抗器和电容器组成,由于晶闸管对于控制信号反应极为迅速,而且通断次数也可以不受限制。

当电压变化时静止补偿器能快速、平滑地调节,以满足动态无功补偿的需要,同时还能做到分相补偿。

对于三相不平衡负荷及冲击负荷有较强的适应性;但由于晶闸管控制对电抗器的投切过程中会产生高次谐波,为此需加装专门的滤波器。

❽ 手机APP和web服务端 跨域问题

跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。
在以前,前端和后端混杂在一起, 比如JavaScript直接调用同系统里面的一个Httphandler,就不存在跨域的问题,但是随着现代的这种多种客户端的流行,比如一个应用通常会有Web端,App端,以及WebApp端,各种客户端通常会使用同一套的后台处理逻辑,即API, 前后端分离的开发策略流行起来,前端只关注展现,通常使用JavaScript,后端处理逻辑和数据通常使用WebService来提供json数据。一般的前端页面和后端的WebService API通常部署在不同的服务器或者域名上。这样,通过ajax请求WebService的时候,就会出现同源策略的问题。
需要说明的是,同源策略是JavaScript里面的限制,其他的编程语言,比如在C#,Java或者iOS等其他语言中是可以调用外部的WebService,也就是说,如果开发Native应用,是不存在这个问题的,但是如果开发Web或者Html5如WebApp,通常使用JavaScript ajax对WebService发起请求然后解析返回的值,这样就可能存在跨域的问题。
一般的,很容易想到,将外部的资源搬到同一个域上就能解决同源策略的限制的。即在Web网站上同时开发一个Http服务端页面,所有JavaScript的请求都发到这个页面上来,这个页面在内部使用其他语言去调用外部的WebService。即添加一个代理层。这种方式可以解决问题,但是不够直接和高效。
目前,比较常见的跨域解决方案包括JSONP (JSON with padding)和CORS (Cross-origin resource sharing )。一些解决方案需要客户端和服务端配合如JSOP,一些则只需要服务端配合处理比如CORS。下面分别介绍这两种跨域方案,以及服务端WebService如何支持这两种跨域方案。
JSONP以及WebService的支持
同源策略下,某个服务器是无法获取到服务器以外的数据,但是html里面的img,iframe和script等标签是个例外,这些标签可以通过src属性请求到其他服务器上的数据。而JSONP就是通过script节点src调用跨域的请求。
当我们向服务器提交一个JSONP的请求时,我们给服务传了一个特殊的参数,告诉服务端要对结果特殊处理一下。这样服务端返回的数据就会进行一点包装,客户端就可以处理。
举个例子,服务端和客户端约定要传一个名为callback的参数来使用JSONP功能。比如请求的参数如下:
http://www.example.net/sample.aspx?callback=mycallback

如果没有后面的callback参数,即不使用JSONP的模式,该服务的返回结果可能是一个单纯的json字符串,比如:
{ foo : 'bar' }

如果和服务端约定jsonp格式,那么服务端就会处理callback的参数,将返回结果进行一下处理,比如处理成:
mycallback({ foo : 'bar' })

可以看到,这其实是一个函数调用,比如可以实现在页面定义一个名为mycallback的回调函数:
mycallback = function(data)
{
alert(data.foo);
};

现在,请求的返回值回去触发回调函数,这样就完了了跨域请求。
如果使用ServiceStack创建WebService的话,支持Jsonp方式的调用很简单,只需要在AppHost的Configure函数里面注册一下对响应结果进行过滤处理即可。
/// <summary>
/// Application specific configuration
/// This method should initialize any IoC resources utilized by your web service classes.
/// </summary>
/// <param name="container"></param>
public override void Configure(Container container)
{
ResponseFilters.Add((req, res, dto) =>
{
var func = req.QueryString.Get("callback");
if (!func.isNullOrEmpty())
{
res.AddHeader("Content-Type", ContentType.Html);
res.Write("<script type='text/javascript'>{0}({1});</script>"
.FormatWith(func, dto.ToJson()));
res.Close();
}
});
}

JSONP跨域方式比较方便,也支持各种较老的浏览器,但是缺点很明显,他只支持GET的方式提交,不支持其他Post的提交,Get方式对请求的参数长度有限制,在有些情况下可能不满足要求。所以下面就介绍一下CORS的跨域解决方案。
CORS跨域及WebService的支持
先来看一个例子,我们新建一个基本的html页面,在里面编写一个简单的是否支持跨域的小脚本,如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>AJAX跨域请求测试</title>
</head>
<body>
<input type='button' value='开始测试' onclick='crossDomainRequest()' />
<div id="content"></div>

<script type="text/javascript">
//<![CDATA[
var xhr = new XMLHttpRequest();
var url = 'http://localhost:8078/json/ShopUserLogin';
function crossDomainRequest() {
document.getElementById("content").innerHTML = "开始……";
if (xhr) {
xhr.open('POST', url, true);
xhr.onreadystatechange = handler;
xhr.send();
} else {
document.getElementById("content").innerHTML = "不能创建 XMLHttpRequest";
}
}

function handler(evtXHR) {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
var response = xhr.responseText;
document.getElementById("content").innerHTML = "结果:" + response;
} else {
document.getElementById("content").innerHTML = "不允许跨域请求。";
}
}
else {
document.getElementById("content").innerHTML += "<br/>执行状态 readyState:" + xhr.readyState;
}
}
//]]>
</script>

</body>
</html>

然后保存为本地html文件,可以看到,这个脚本中,对本地的服务http://localhost:1337/json/Hello 发起了一个请求, 如果使用chrome 直接打开,会看到输出的结果,不允许跨域请求。 在javascript控制台程序中同样可以看到错误提示:

那么如果在返回响应头header中注入Access-Control-Allow-Origin,这样浏览器检测到header中的Access-Control-Allow-Origin,则就可以跨域操作了。
同样,如果使用ServcieStack,在很多地方可以支持CORS的跨域方式。最简单的还是在AppHost的Configure函数里面直接写入:
/// <summary>
/// Application specific configuration
/// This method should initialize any IoC resources utilized by your web service classes.
/// </summary>
/// <param name="container"></param>
public override void Configure(Container container)
{
this.AddPlugin(new CorsFeature());
}

这样就可以了,相当于使用默认的CORS配置:
CorsFeature(allowedOrigins:"*",
allowedMethods:"GET, POST, PUT, DELETE, OPTIONS",
allowedHeaders:"Content-Type",
allowCredentials:false);

如果仅仅允许GET和POST的请求支持CORS,则只需要改为:
Plugins.Add(new CorsFeature(allowedMethods: "GET, POST"));

当然也可以在AppHost的Config里面设置全局的CORS,如下:
/// <summary>
/// Application specific configuration
/// This method should initialize any IoC resources utilized by your web service classes.
/// </summary>
/// <param name="container"></param>
public override void Configure(Container container)
{

base.SetConfig(new EndpointHostConfig
{
GlobalResponseHeaders = {
{ "Access-Control-Allow-Origin", "*" },
{ "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS" },
{ "Access-Control-Allow-Headers", "Content-Type" },
},
});
}

现在运行WebService,使用postman或者Chrome调用这个请求,可以看到返回的值头文件中,已经加上了响应头,并且可以正常显示返回结果了:

CORS使用起来简单,不需要客户端的额外处理,而且支持Post的方式提交请求,但是CORS的唯一一个缺点是对客户端的浏览器版本有要求,支持CORS的浏览器机器版本如下:

总结
本文介绍了JavaScript中的跨域基本概念和产生的原因,以及如何解决跨域的两种方法,一种是JSONP 一种是 CORS,在客户端Javascript调用服务端接口的时候,如果需要支持跨域的话,需要服务端支持。JSONP的方式就是服务端对返回的值进行回调函数包装,他的优点是支持众多的浏览器, 缺点是仅支持Get的方式对服务端请求。另一种主流的跨域方案是CORS,他仅需要服务端在返回数据的时候在相应头中加入标识信息。这种方式非常简便。唯一的缺点是需要浏览器的支持,一些较老的浏览器可能不支持CORS特性。
跨域支持是创建WebService时应该考虑的一个功能点,希望本文对您在这边面有所帮助,文中是使用ServiceStack来演示跨域支持的,如果您用的WCF的话,知道跨域原理的前提下,实现跨域应该不难。

参考资料:
https://github.com/ServiceStack/ServiceStack/wiki/Customize-HTTP-Responses
https://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters
http://stackoverflow.com/questions/8211930/servicestack-rest-api-and-cors
http://stackoverflow.com/questions/15224038/rename-callback-parameter-for-jsonp

❾ 192.168.0.1被占用导致,XP网络不能共享

楼主问题应该是局域网是0段的。xp电脑要共享给系统内的虚拟机或者另一个网络 这时xp的intel共享向导默认产生的路由网关也是0段的。最近我也是遇到这个问题

❿ ARP攻击!

你可以进入路由器管理员吗?我有一招很毒辣的,神不知鬼不觉来形容。不用高档的路由器普通的路由器都行。不使arp攻击,直接禁用别人的BT 迅雷 qq pps 快车 脱免 旋风 ....但不影响网页使用!

前提是你要加到200分我才教!如果你进入不了路由器管理员192.168.1.1就没法教你了。

阅读全文

与wcf过滤器相关的资料

热点内容
深度过滤器厂家 浏览:381
米家空气净化器2怎么拆开 浏览:917
工业润滑油过滤市场 浏览:495
医院污水池除臭排放标准 浏览:166
阴离子阳离子交换膜 浏览:123
戴森空气净化器滤芯怎么拆 浏览:928
净化器上面显示复位什么意思 浏览:999
净水器里有什么水可以做雾化 浏览:396
蒸馏石油的分馏 浏览:744
饮水机水桶为什么会变绿 浏览:803
饮水机热水往上出是什么意思 浏览:627
如何当好污水处理厂的班长 浏览:327
微动力污水处理器 浏览:729
四氯化碳如何蒸馏水 浏览:950
废水资源化问题与出路 浏览:705
树脂补牙还要打磨 浏览:189
什么叫做雨污水阴阳管 浏览:438
废水处理ph是什么意思 浏览:17
反渗透净水器有废水比是什么意思 浏览:507
净化器过滤芯怎么取出 浏览:837