WCF初学过程小结
vb实现三层结构及Wcf的入门实例(.net)
网上用来写三层结构和Wcf的实例不多,本人最近因为工作需要,简单学习了三层结构和Wcf服务,这里用 (vs 2010)作一个简单实例,希望能帮助一些需要的人快速入门。
网上关于三层结构和Wcf的解释都太专业和高大上,这往往会初学者带来困难。
这里用一些个人的理解作一些粗浅说明,各位配合下面的例子写出自己的代码后,再返回去看他们的专业定义,也许会更容易理解些。
所谓三层结构,按我的理解,就是把一个软件的开发,分成三块,一块专门作界面,一块专门作业务流程,一块专门作数据操作。
这在团队开发中非常有用,可以分工合作,一人作一部分,将来出错也好查错,维护起来也方便,特别是系统庞大了以后,作用更明显。
当然,如果是个人作个小软件,个人觉得什么界面、业务、数据还是放在一起吧,分层浪费的时间更多。
所谓的Wcf,我的简单理解就是为了实现三层结构中的数据层。
就是作一个数据操作的DLL,然后在网上发布这个DLL,别人调用这个DLL中的函数来实现功能,而不用管DLL是怎么写的。
那为什么不直接在自己的代码中写呢,而是要发布Dll到网上呢?答案是为了数据安全。
比如你要调用sql server中的数据库,客户端中如果使用了连接的用户名和密码,别人可以简简单单挂个小程序就把你的用户名、密码就截获了;而使用了wcf,数据库连接语句都是在服务器上进行,客户端只获得了返回的结果,显然就安全多了(平时我们浏览网页也是这种模式),还有一个好处就是如果这个数据的逻辑发生变化,更新服务器的DLL 文件就好,不需要再更新客户端了,比如某个算法,由原来的X*0.2调整为X*0.3,这个时候你也要客户端和你一起更新?这显然不经济。
当然如果你是作单机版的软件,在本机上运行的,就没有必要学wcf了。
下面会讲到Wcf的建立和在IIS 5.1上的发布,大家慢慢往下看。
以下的图例就不再作详细的文字描述了。
一、打开vs 2010,新建一个解决方案,名字为test,存在e:\mytest下二、左上角菜单->文件->添加->新建项目->windows->windows窗体应用程序,名称:界面层四、左上角菜单->文件->添加->新建项目->Wcf->Wcf服务库,名称:数据层。
cw初学
之所以用交互的话来作为这课的例句,除了上面这个句型外,还想表达1和0这两个最后还没学的数字,其实我想同学们在学前面几个数字的时候,早就总结出数字的编码规律了,不说你也能推断出0-9该怎么发。但在今天的后一句话里尤其强调了0的使用,这是和9(N)一样,经常被人在特定的时候用短码代替的数字,而且有两种达方法,字母“OPQ”的O以及T。巧得很,今天学的另外一个数字“1”也有个常用的短码“A”,它常见于比赛的序列号比如A5表示15,短码不是随便用的,只有5NN,1TT这类肯定不会搞错的场合下才使用。
熟字表ABCDEGHIKLMNPQRSUXYZ 4589
生字表O J T
第四句 73
通过前面的呼号,信号报告,姓名,位置的信息交换,通常可以结束通联了。实际上通联的最基本要素是呼号和信号报告,只要双方得到呼号和rst后,就算是有效通联了。这第四句话就是通联的结束语了
熟字表 ABCDEFGHIJKLMNOPQRSTUWXYZ 23456789
生字表 0 1 ?
报了设备通常还会交流天线的情况,实际上天线在通联中起的作用比机器更重要:
第七句 ANT
ANT (HR IS) V DP ES (ABT) 15MH
ANT (HR IS) /...-/ DP LB MY QTH IS NINGBO NW QRU 73 TU SK ..
BD4ALC DE BG5CLB MY QTH IS NINGBO N/.--/ QRU /--.../...--/ TU /...-.-/././
BG5CLB DE BD4ALC 73 TU SK ..
关键词
QSL 这里指qsl卡片
VIA 通过,经过
INFO 信息
BURO 卡片管理局
十句话学会CW
十句话学会CW这里很多朋友是新考出呼号的,现在最好是先打好ssb的基础,现在谈cw是不是有点早了?但是cw实在是非常有魅力,就算不合时宜我也在这里先胡说八道了。
一,我的cw学习经历我的cw是完全自学的,也就是说野路子出身,其中走过很多弯路。
我90年就学过cw,那时候刚考出业余电台值机员操作证书,呼号BZ4DIP,当时无聊,为了增加乐趣把26个字母的都记下了,听协会翻录下来的磁带,进展非常缓慢,在收信机前做swl的时候,也能抄收一些发得慢的呼号,当然每个呼号要听个十遍八遍才能完全抄下来。
92年开始到广东去了,从此10年间没有碰过业余无线电的东西,2002年归队以后,发现这个ham世界比以前精彩多了,以前蒙昧以求的“天价”收发信机,现在遍地都是,而且我也买得起了。
第二年参加了cqww ssb的比赛,当时是第一次比赛,临时报佛脚看了比赛规则,学习了dos版的比赛软件的使用(ct),抱着学习的态度参与了比赛。
谁知仅仅用一根直立天线,比赛的成绩竟然超过了以前中国地区同组的记录(单人全波段低功率组),其实成绩并不怎么样,但比较是破了“中国第一”BA4DW给立下的记录(他有其他更高的记录,这个记录不是他的实际水平),作为一个老初学者来说也够兴奋的,48小时的比赛,居然不累,比赛完马上上班,到处看别人的比赛体会,从此便真正烧上ham活动了。
这个比赛以后我准备换机器,后来的很长一段时间里只有一台817,迫使自己进入qrp的世界,要知道玩qrp不会cw是非常痛苦的事情,于是决心开始学已经忘记了的cw。
10年以后学习cw的环境要比以前好多了,internet上到处都是资料,研究的结果koch方法是学习CW的最佳方法,于是下载了英国人编的koch软件,听15-20wpm,花了很长时间,cw是学会了,但是速度的提高很慢。
当时21兆的传播还不错,经常在21.130(初学者频率)附近找人练习,跨出了cw通连的第一步,实际上发现,所学的cw非常不够,别人发过来的东西经常整段的抄不下来,后来培养了习惯,就是一定抄对别人的呼号,信号报告比较固定,所以也很少会漏掉,实际上这已经是一个合格通连的所有要素,其他的名字,地址,设备,天气,温度之类的完全不用管它,厚着脸皮不管别人发什么,把自己的一套发过去就可以73再见了。
WCF框架
概述Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。
使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。
根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。
它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。
WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASM X、WSE和MSMQ。
以通信(Communication)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于Internet;以宿主程序而论,可以以,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。
WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML,Kerberos,X509,用户/密码,自定义等多种标准与模式。
也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。
WCF是建立在.Net Framework 2.0基础之上的,正式的版本应该会作为Windows Vist a的核心部分而Release。
然而,这并不代表WCF只能运行在Windows Vista下。
只要安装了WinFX Runtime Components,在Windows XP和Windows 2003操作系统下,仍然可以使用。
Visual Studio 2005中并没有包含WCF,但是当安装好了WinFX Runtime Compo nents后,我们就可以在Visual Studio 2005环境下开发和创建WCF的程序了。
一个完整的WCF服务的发布与测试过程
使用VS自带的WCFSVCHost(WCF服务主机)发布WCF服务,时刻开发人员测试使用。
下面我们来看一下如何在IIS中部发布一个WCF服务。
环境是VS 2008 (公司电脑没有安装VS2010)^_^我们从头开始,不写代码,完全的配置,会收获不小。
新建一个WCF 服务库建立一个WCF服务应用程序结果如下删除掉WCF程序中不需要的默认文件,如下图为WcfService1项目添加WcfServiceLibrary1的引用,如下图。
修改声明指示内容,让这个Service.svc文件的后台代码指向我们创建的WCF服务库项目--WcfServiceLibrary1项目中的服务类,改后的代码如下:<%@ ServiceHost Language="C#" Debug="true"Service="WcfServiceLibrary1.Service1" %>Ctrl+Shift+B 编译一下解决方案,配置工具用的反射,先编译才行此时我们的WCF服务站点并不能把WCF服务库中的服务和终结点发布出来,还需要我们对web.config进行一系列的配置工作。
右键我们要配置的Web.Config文件,编辑WCF配置在弹出的服务配置窗口中,把Service1服务指定到WCF服务库的WcfServiceLibrary1.dll 中的WcfServiceLibrary1.Service1服务类上。
再把其中的一个对外终结点的Contract设为WCF服务库的WcfServiceLibrary1.dll中的WcfServiceLibrary1.IService1服务契约上。
这一步是可选的,我们再为此WCF服务站点添加一个终结点,配置如下图下面我们将试着使用不同的终结点与WCF服务进行交互,查看运行情况。
当我们使用IIS5或IIS6发布WCF服务的时候一般只创建Http绑定的终结点,而不能创建使用TCP绑定、管道绑定的终结点。
(原创)WCF读取数据库中表
(原创)WCF读取数据库中表7.1 项⽬说明服务器端为Windows窗体应⽤程序,客户端也为Windows窗体应⽤程序,编写语⾔为:C#7.2 项⽬架构7.3 项⽬开发过程7.3.1 服务器端设计第⼀步:新建⼀个空的解决⽅案,命名为WCFDemo_1(可以任意取名)第⼆步:点击“⽂件”——>“添加”——>“新建项⽬”,左侧栏选择“其他语⾔”——>“Visual C#”——>“Windows”,右边模板中选择“Windows窗体应⽤程序”,命名为:SQLService_Host,如图所⽰,点击确定按钮即可,这样完成了数据库连接服务的宿主程序的创建。
第三步:右键项⽬“SQLService_Host”——>“添加”——>“新建项”,在模板中选择“WCF服务”,命名为:WCFService.cs,如图所⽰:点击“添加”按钮,即创建了⼀个名为WCFService.cs的服务,同时⽣成了其相应的接⼝程序:I WCFService.cs及配置⽂件:App.config第四步:编写接⼝程序I WCFService.cs[OperationContract]System.Data.DataTable GetDataByTable();注:这⾥接⼝实现的功能:通过DataTable获得数据库第五步:编写接⼝实现的服务程序WCFService.cspublic System.Data.DataTable GetDataByTable(){//这⾥可以定义数据持久化操作,访问数据库等System.Data.DataSet dataSet= new System.Data.DataSet();System.Data.DataTable dataTable = null;SqlConnection sqlConnection = new SqlConnection("Data Source=ws12\\SQLEXPRESS; Initial Catalog=Song; Integrated Security=True; User ID=ws12\\Administrator; Password=12345678");sqlConnection .Open ();try{System.Data.SqlClient.SqlDataAdapter sqlDataAdapter = new System.Data.SqlClient.SqlDataAdapter("SELECT 区号, 节点号, 歌曲序号, 歌曲名称, 开始播放时间, 歌曲长度, 播放状态, 结束时间, 总播放长度 FROM Song_List ORDER B sqlDataAdapter.Fill(dataSet, "Song_List");if (dataSet != null && dataSet.Tables.Count > 0){dataTable = dataSet.Tables[0];}}catch (Exception e){}finally{sqlConnection.Close();}return dataTable ;}第七步:在宿主程序的窗体中添加两个Button,分别为:“开启服务”、“停⽌服务”,再添加⼀个Label,如图:第⼋步:宿主窗体的后台代码编写:1、添加下述命名空间using System.ServiceModel;2、实例化⼀个服务宿主host ,即:private ServiceHost host = null; //实例化⼀个服务宿主,host开启服务的click事件:private void button1_Click(object sender, EventArgs e){host = new ServiceHost(typeof(SQLSercice_Host.WCFService));host.Open();bel1.Text = "服务已启动";}停⽌服务的click事件:private void button2_Click(object sender, EventArgs e){if (host.State != CommunicationState.Closed)//判断服务是否关闭{host.Close();//关闭服务}bel1.Text = "服务已关闭";}第九步:服务器端运⾏点击“开启服务”按钮,弹框显⽰:将App.config中的地址放在浏览器中,如观察到如下:点击svcut.exe后⾯的地址,若出现下图,则说明服务⽣成成功点击“停⽌服务”按钮,弹框显⽰:⾄此,服务器端设计完成7.3.2 客户端设计第⼀步:在上述项⽬中,点击“⽂件”——>“添加”——>“新建项⽬”,左侧栏选择“其他语⾔”——>“Visual C#”——>“Windows”,右边模板中选择“Windows窗体应⽤程序”,命名为:SQLService_Client,如图所⽰,点击确定按钮即可,即在解决⽅案WCFDemo_1中⼜新建了⼀个名为SQLService_Client的项⽬,来作为客户端第⼆步:在上述窗体中,添加⼀个DataGridView和⼀个Button,并将Button的Text属性设置为“获取数据库”,如图:第三步:找到服务器的SQLSercice_Host.exe⽂件并双击,开启服务第四步:右键项⽬SQLService_Client——>“添加服务引⽤”,弹框显⽰:第五步:输⼊服务器端的App.config中的地址,设置命名空间为:SQLService如图所⽰:这样,客户端就将服务器端的数据库连接服务添加进去了第六步:编辑客户端窗体的后台代码添加命名空间using System.ServiceModel;//必须添加按钮“获取数据库”的click事件代码:private void button1_Click(object sender, EventArgs e){using (SQLService.WCFServiceClient proxy = new SQLService.WCFServiceClient()) //创建代理,⽤于连接服务器{System.Data.DataTable dataTable = proxy.GetDataByTable();if (dataTable != null){dataGridView1.DataSource = dataTable;//绑定数据源到控件}}}第七步:运⾏结果:⾄此,该项⽬开发完毕⼩结:开发过程中遇到的⼀个错误:服务器端的WCFService.cs程序中,数据库连接代码:SqlConnection sqlConnection = new SqlConnection("Data Source=ws12\\SQLEXPRESS; Initial Catalog=Song; Integrated Security=True; User ID=ws12\\Administrator; Password=12345678");引号中,如果将“\\”变为“\”就会报⽆法识别的转义序列的错误,上⽹查资料,得到解决⽅法是,⼀定要写成双斜杠!。
WCF教程6
[原创]我的WCF之旅(6):在Winform Application中调用Duplex Service 出现TimeoutException的原因和解决方案几个星期之前写了一篇关于如何通过WCF进行双向通信的文章([原创]我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communication)),在文章中我提供了一个如果在Console Application 调用Duplex WCF Service的Sample。
前几天有个网友在上面留言说,在没有做任何改动得情况下,把作为Client的Console Application 换成Winform Application,运行程序的时候总是出现Timeout的错误。
我觉得这是一个很好的问题,通过这个问题,我们可以更加深入地理解WCF的消息交换的机制。
1.问题重现首先我们来重现这个错误,在这里我只写WinForm的代码,其他的内容请参考我的文章。
Client 端的Proxy Class(DuplexCalculatorClient)的定义没有任何变化。
我们先来定义用于执行回调操作(Callback)的类——CalculatorCallbackHandler.cs。
代码很简单,就是通过Message Box的方式显示运算的结果。
using System;using System.Collections.Generic;using System.Text;using System.Windows.Forms;using Artech.DuplexWCFService.Contract;using System.ServiceModel;namespace Artech. WCFService.Client{[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]public class CalculatorCallbackHandler : ICalculatorCallback{ICalculatorCallback Members}}接着我们来设计我们的UI,很简单,无需多说。
基于WCF的学生管理系统的设计与实现
p r e s s , 2 00 7 .
[ 2 ] S c o t t KI e i n P r o f e s s i o n a l WCF P r o g r a mmi n g , US : Wr o x
pr e s s , 2 0 07 .
[ 3 】 吴晟 基于WC F 技术s o a J l i 务 平 台设计与实现 . 吉林: 吉 林 大 学, 2 0 0 9 [ 4 】 任毅. 基 于S OA的 电子政 务平 台的配置 管理研 究
口 ) ] . 武 汉: 武汉 理 工 大 学, 2 0 1 0 .
…
…
…
…
…ቤተ መጻሕፍቲ ባይዱ
…
…
…
…
…
一
廑 一 l
E x c e l 的格 式 导 出数 据 。 3 . 统计分析模块 该 模块 主要 负 责对 学 生 信 息进 行 统 计 分析 ,对得到 的相关 结果进行 查询 。在 学生 基本信 息统计 界面 ,管理员可 以查看学 生的 所有信 息,在此 界面所 有学生 的信息非 常直 观 地 统 计 给 管 理 员 。在 学 生 住 宿 信 息 统 计 界 面 ,可 以对 住 宿 楼 、 单 元 等 信 息 进 行 统 计 。 在班级 人数统 计界面 ,管理员 可 以统计 各个 班 级 的 人 数 , 以 班 为 单 位 进 行 学 生 基 本 情 况 的统计分析 。 4 . 宿舍管理模块 该 模 块 主 要 负 责 对 学 生 的宿 舍 信 息进 行 管 理 。 在 学 生 住 宿 情 况 导 入 界 面 ,管 理 员 可 以将各 宿舍 区、各楼 区的情况 导入到数 据库 中 ,并 可 以非 常 方 便 地 查 询 、 统 计 学 生 宿 舍 情况 。在宿舍 统计模块 ,管理 员可 以统 计宿 舍 的 具 体 信 息 5 . 奖惩管理模块 用 户 进 入 此 模 块 后 ,可 以 查 询 学 生 的 奖 惩 信 息 、 修 改 学 生 的奖 学 金 、违 纪 情 况 等 相 关 内容 。 该 模 块 不 仅 包 含 了学 生 的 奖 惩 信 息 的 管 理 , 而 且 可 以 进 行 学 生 的 相 关 奖 惩 信 息 的 查 询 以及 添 加 、 更 新 和 删 除 等 操 作 。 在 奖 学 金 管 理 功 能 界 面 , 管 理 员 权 限 可 以查 看 所 有 院系 的学生 的获奖情 况 ,辅 导员权 限只能 查 看 自 己 院 系 的 学 生 的相 关 获 奖 情 况 。 辅 导 员 权 限 可 以在 违 纪 处 分 管 理 功 能 中 添 加 、 查
MFC学习心得
有六个基本的控制:CStatic、CButton、CEdit、CList、CComboBox和CScrollBar。
你需要理解的是那个控制能做些什么、你应该如何控制它的外表和行为以及如何让控制能响应用户事件。
void CHelloView::OnDraw(CDC* pDC)
{
CHelloDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CString str("Hello,World!");
创建一个静态控件分两步。首先,调用构造函数来构造此CStatic对象,然后调用Create成员函数来创建此静态控件并将它与该CStatic对象连接。如果你是在一个对话框中创建了一个静态控件(通过一个对话框资源),则当用户关闭这个对话框时,此CStatic对象被自动销毁。如果你是在一个窗口中创建了一个CStatic对象,则必须由你来销毁它。在一个窗口的堆栈中创建的CStatic对象将自动被销毁。如果你是使用new函数在堆中创建CStatic对象,则当你使用完后,必须调用delete来销毁这个CStatic对象。
SS_BLACKRECT 该控制以填充的矩形显示。颜色与当前的窗口框架相同。
SS_CENTER 文本居中。
SS_GRAYFRAME 控制以矩形边框方式显示。颜色与当前桌面相同。
SS_GRAYRECT 该控制以填充的矩形显示。颜色与当前的桌面相同。
SS_ICON 控制以图标形式显示。文本作为图标在资源文件的名称。rect参数只控制位
wcf原理
wcf原理
WCF是Windows Communication Foundation的简称,它是一种用于构建分布式系统的编程框架。
WCF基于.NET Framework,提供了一种统一的、可扩展的编程模型来使用各种分布式技术。
WCF的原理基于拦截机制,通过通道(Channel)来传递和拦截消息。
在客户端对服务端服务进行调用时,首先会通过一个服务代理对象将调用方提供的对象序列化到消息中,然后该消息通过通道进行传递。
这些通道包括传输通道、消息编码通道、管理会话通道和传播事务通道等,形成了一个通道堆栈。
由于对象已经被序列化,消息可以跨进程或机器进行传递,利用传输通道传递到服务端。
在服务端,消息通过最底层的传输通道接收,然后解析消息编码,并一层层地往上传输。
在服务端的通道栈之上,有一个分发器(Dispatcher),它会首先对消息进行检查,然后选择一个客户端要调用的操作。
在这个过程中,消息会被反序列化。
此外,WCF的体系架构包括契约、服务运行时、消息和寄宿四个方面。
契约描述了服务的功能和作用,告诉SOA系统中的其它节点这个服务是“做什么”的;服务运行时定义了服务在运行时的具体行为;消息用于在客户端和服务端之间传递数据;寄宿则是指将服务部署到特定的环境中,并负责服务的生命周期管理。
总之,WCF通过拦截机制、通道和契约等概念,提供了一种灵活、可扩展的分布式系统开发方式。
WCF教程5
[原创]我的WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的重载(Overloading)对于.NET重载(Overloading)——定义不同参数列表的同名方法(顺便提一下,我们但可以在参数列表上重载方法,我们甚至可以在返回类型层面来重载我们需要的方法——页就是说,我们可以定义两个具有相同参数列表但不同返回值类型的两个同名的方法。
不过这种广义的Overloading不被我们主流的.NET 语言所支持的——C#, , 但是对于IL来说,这这种基于返回值类型的Overloading是支持的)。
相信大家听得耳朵都要起老茧了。
我想大家也清楚在编写传统的XML Web Service的时候,Overloading是不被支持的。
原因很简单,当我们用某种支持.NET的高级语言写成的程序被相应的编译器编译成Assembly 的过程中,不单单是我们的Source Code会被变成IL Code,在Assembly中还会生成相应的原数据Metadata——这些Metadata 可以被看看是一张张的Table。
这些Table存储了定义了主要3个方面的信息——构成这个Assembly文件的信息;在Assembly中定义的Type 及其相关成员的信息;本引用的Assembly 及Type的信息。
这些完备的Metadata成就了Assembly的自描述性(Self-Describing),也只是有了这些Metadata,使.NET可以很容易地根据方法参数的列表甚至是返回值得类型来判断调用的究竟了那个方法。
而对于XML Web Service,它的标准实际上是基于XML的,近一步说,一个XML Web Service 是通过一个一段XML来描述的,而这个描述XML Web Service的XML,我们称之为WSDL (Web Service Description Language)。
wcf 面试题
wcf 面试题WCF(Windows Communication Foundation)是一个用于构建分布式应用程序的框架,它提供了一种统一的编程模型,用于在应用程序之间进行通信。
WCF 面试题旨在评估面试者对 WCF 框架的理解程度和其在实际应用中的应用能力。
在接下来的文章中,将回答一些常见的 WCF 面试题,并提供详细的解释和示例。
一、什么是 WCF?WCF 是一种用于构建分布式系统的微软技术,它提供了一种可靠、安全和可扩展的方式,用于在应用程序之间进行通信。
WCF 使用SOAP(简单对象访问协议)作为其主要通信协议,并支持其它协议如HTTP、TCP 等。
它提供了对于消息传输、编码、安全性等方面的灵活配置。
二、WCF 的主要组件有哪些?WCF 的主要组件包括:1. 服务契约(Service Contract):定义了服务的操作和消息交换模式。
2. 数据契约(Data Contract):用于在服务和客户端之间传输数据的约定。
3. 消息(Message):在 WCF 中,所有的通信都是通过消息进行的。
消息可以包含头部、正文和尾部信息。
4. 服务端点(Service Endpoint):定义了服务的地址、协议和绑定信息。
5. 绑定(Binding):指定了服务和客户端之间的通信规范。
6. 行为(Behavior):用于配置和扩展服务的运行时行为。
三、WCF 支持哪些传输协议?WCF 支持多种传输协议,包括但不限于:1. HTTP:最常用和通用的传输协议,在互联网环境中广泛使用。
2. TCP:提供了高性能和可靠性的传输协议,适用于局域网或内部网络。
3. MSMQ:使用消息队列来进行异步的、可靠的消息传输。
4. Named Pipes:适用于在同一台机器上的进程间通信。
5. Peer-to-Peer:支持对等网络的传输协议,用于构建分布式系统。
四、如何创建和部署一个 WCF 服务?创建和部署一个 WCF 服务需要以下步骤:1. 定义服务契约和数据契约。
wcf operationcontract详解
WCF OperationContract详解一、引言在WCF(Windows Communication Foundation)中,OperationContract是一个非常重要的特性,它用于定义服务契约中的操作。
在本文中,我们将深入探讨OperationContract的概念、用法、属性和相关注意事项,帮助读者更好地理解和应用这一特性。
二、OperationContract的概念在WCF中,OperationContract用于定义服务契约(Service Contract)中的操作(Operation)。
它告诉WCF服务端和客户端哪些操作可以被调用,以及它们的参数、返回值和其他属性。
三、OperationContract的用法1. 基本用法OperationContract特性是应用于服务契约接口中的方法上的。
例如:```csharp[ServiceContract]public interface IMyService{[OperationContract]string GetData(int value);}```在上面的代码中,GetData方法使用了OperationContract特性,表示这是一个可以被调用的操作。
在客户端调用该操作时,WCF会根据OperationContract的定义来处理请求和响应。
2. 参数和返回值OperationContract还可以定义方法的参数和返回值。
例如:```csharp[ServiceContract]public interface IMyService{[OperationContract]string GetData(int value);[OperationContract]void ProcessData(string data);}```在上面的代码中,GetData方法有一个int类型的参数和一个string 类型的返回值,而ProcessData方法则没有返回值。
WCF简单实例
为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用。
本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构。
对那些对WCF不是很了解的读者来说,这个例子将带领你正式进入WCF的世界。
在这个例子中,我们将实现一个简单的计算服务(CalculatorService),提供基本的加、减、乘、除的运算。
和传统的分布式通信框架一样,WCF本质上提供一个跨进程、跨机器以致跨网络的服务调用。
在本例中,客户端和服务通过运行在相同的同一台机器上不同进程模拟,图1体现了客户端和服务端进程互相调用的关系。
图1 计算服务应用运行环境WCF的服务不能孤立地存在,需要寄宿于一个运行着的进程中,我们把承载WCF服务的进程称为宿主,为服务指定宿主的过程称为服务寄宿(Service Hosting)。
在我们的计算服务应用中,采用了两种服务寄宿方式:通过自我寄宿(Self-Hosting)的方式创建一个控制台应用作为服务的宿主(寄宿进程为Hos ting.exe);通过IIS寄宿方式将服务寄宿于IIS中(寄宿进程为IIS的工作进行W3wp.exe)。
客户端通过另一个控制台应用模拟(进程为Client.exe)。
接下来,我们就一步一步来构建这样的一个WCF应用。
步骤一:构建整个解决方案通过VS 2008创建一个空白的解决方案,添加如下四个项目。
项目的类型、承载的功能和相互引用关系如下,整个项目在VS下的结构如图2所示。
Contracts:一个类库项目,定义服务契约(Service Contract),引用System.ServiceMode程序集(W CF框架的绝大部分实现和API定义在该程序集中);∙Services:一个类库项目,提供对WCF服务的实现。
定义在该项目中的所有WCF服务实现了定义在Con tracts中相应的服务契约,所以Services具有对Contracts项目的引用;∙Hosting:一个控制台(Console)应用,实现对定义在Services项目中的服务的寄宿,该项目须要同时引用Contracts和Services两个项目和System.ServiceMode程序集;∙Client:一个控制台应用模拟服务的客户端,该项目引用System.ServiceMode程序集。
WCF开发简简单单的六个步骤
WCF开发简简单单的六个步骤
一、WCF介绍
二、WCF开发简单六步
WCF的开发过程分为以下六个步骤:
1、定义契约:这一步是定义不同服务之间的沟通接口,它可以是服务操作、消息和数据的抽象,让客户端可以根据这些抽象来操作服务。
2、创建服务:这一步是实现定义好的接口,然后使用这些接口实现服务的相关功能。
3、配置服务:这一步是将服务部署到WCF服务宿主中,并配置服务的相关参数,例如端口号、绑定信息等。
4、创建客户端:这一步是创建客户端,它可以是本地客户端或远程客户端。
5、配置客户端:这一步是为客户端配置服务的地址、绑定信息等,以便客户端可以正确的访问到服务。
6、测试:这一步是测试程序的正确性,以确保客户端和服务之间的正常通信。
三、WCF开发步骤详解
1、定义契约
在开发WCF服务之前。
wcf使用流程
WCF使用流程WCF(Windows Communication Foundation)是一种用于构建分布式应用程序的框架。
它提供了一种统一的编程模型,可以在不同的应用程序之间进行通信,并支持多种传输协议和消息格式。
本文将详细描述WCF的使用流程,包括创建服务和客户端、配置服务和客户端、部署和测试。
1. 创建服务首先,我们需要创建一个WCF服务。
下面是创建WCF服务的步骤:步骤1:创建一个新的WCF服务项目在Visual Studio中,选择”新建项目”,然后选择”WCF”类别下的”WCF服务应用程序”模板。
输入项目名称并点击”确定”。
步骤2:定义服务契约打开生成的IService.cs文件,在其中定义服务契约(Service Contract)。
契约是一个接口,它定义了可由客户端调用的操作。
[ServiceContract]public interface IService{[OperationContract]string GetData(int value);}步骤3:实现服务契约打开生成的Service.cs文件,在其中实现契约中定义的操作。
这些操作将在客户端调用时执行。
public class Service : IService{public string GetData(int value){return $"You entered: {value}";}}步骤4:配置服务终结点打开生成的App.config文件,在其中配置服务终结点。
终结点定义了服务的地址、协议和消息格式。
<system.serviceModel><services><service name="WcfService.Service"><endpoint address="" binding="basicHttpBinding" contract="WcfService.ISe rvice" /><endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExch ange" /></service></services><behaviors><serviceBehaviors><behavior><serviceMetadata httpGetEnabled="true" /><serviceDebug includeExceptionDetailInFaults="false" /></behavior></serviceBehaviors></behaviors></system.serviceModel>2. 创建客户端接下来,我们需要创建一个WCF客户端,以便与服务进行通信。
corewcf 使用
corewcf 使用
CoreWCF 是一个用于构建 WCF 服务的开源项目,它是基
于 .NET Core 平台的。
WCF(Windows Communication Foundation)是一个用于构建分布式应用程序的技术,它提供了一种简单而强大
的方式来实现不同应用程序之间的通信。
随着 .NET Core 的发展,许多开发人员希望能够在跨平台的环
境中使用 WCF 技术。
CoreWCF 的出现填补了这一空白,它为开发人
员提供了在 .NET Core 平台上构建 WCF 服务的能力。
使用 CoreWCF 可以让开发人员在 .NET Core 上享受到 WCF 技
术的种种优势,比如强大的消息传递机制、丰富的安全特性、灵活
的终结点配置等。
同时,CoreWCF 也提供了与传统 WCF 的兼容性,
这意味着迁移现有的 WCF 服务到 .NET Core 平台上变得更加容易。
在使用 CoreWCF 进行开发时,开发人员可以通过 NuGet 包管
理器轻松地引入 CoreWCF 相关的库,然后就可以开始构建 WCF 服
务了。
与传统的 WCF 相比,CoreWCF 的配置和使用方式也更加简洁
和灵活,这使得开发人员可以更加专注于业务逻辑的实现,而不必
过多关注底层的技术细节。
总的来说,CoreWCF 的出现为 .NET Core 平台上的 WCF 开发带来了新的活力和可能性,它使得开发人员可以更加方便地利用WCF 技术来构建跨平台的分布式应用程序。
随着 .NET Core 的不断发展和壮大,相信 CoreWCF 也会成为越来越多开发人员的首选技术之一。
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、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012年3月28日星期三:1.以WCF为基础框架搭建面向服务的企业级应用程序,以WF工作流引擎支撑企业应用中业务流程的传递与控制,以Cardspace和WCF固有的安全策略保证企业信息安全,最后以 AJAX、WPF、和Silverlight技术丰富客户端界面的绚丽表现,从而改善企业客户对应用程序的体验,这就是微软实现企业级应用的霸业宏图。
WCF在其中的地位举足轻重。
2.进行了一个简单WCF例子的调试,上午基本上快出来了,结果下午遇到一个问题,描述如下:查阅网上资料发现,由于权限的原因导致不能正常访问,于是进行了探索,结果按照网上说的去做却没有结果,于是重新启动VS2010,发现在使用管理员身份登录VS2010的前提下,运行成功!!!分析总结:2012年3月29日星期四1.对C#的学习,C#的基本结构Using System;Namespace Namespace1{Class Class1{ //类}Interface Interface1 //接口{}Struct struct1 //结构{}Delegate int delegate1(); //委托Enum enum1 //枚举{}Namespace Namespace2 //命名空间{Struct struct2 //结构{}}Class Mainclass2 //类{Static void main(string[] args) //main方法{//your program code here}}}2.WCF大部分功能包含在一个单独的程序集System.ServiceModel.dll中,命名空间为System.ServiceModel.2012年3月30日星期五:主要工作1.对服务协定(契约)进行了学习,一般由接口实现服务契约,操作契约2.服务消息传输的三种方式:默认的请求/答复(客户端必须等待服务端的回复之后才能继续工作,否则继续等待服务器的回复,这样对于操作时间长的服务将导致客户端性能和响应能力下降)、单向传输(客户端不必等待操作完成,不处理SOAP错误,主要依靠[OperationContract(IsOneWay = true)来实现])、双工传输(双方独立发送消息,回调协定CallBackContract)。
其中着重在实现双工上调试了好多程序,最后成功调试。
中间解决了如下问题:VS2005向VS2010的转化的技巧; /a/2366598/,若按此方法,仍不能成功调试,则删除相应引用,如Service.Model等引用,然后重新添加引用。
具体的双工通信原理还有待理解,通过对此程序的调试,对VS2010加深了理解。
3.对于数据协定的理解不是很深刻。
[DataContract]、[DataMember]4.配置服务:主要是对服务的地址、发送和接收消息传输编码、安全类型进行配置,借助配置文件和代码配置两种方式进行配置。
(services, bingdings(可选), behaviors,endpoint)5.Endpoint包括URI、binding、bindingconfiguration、contract,为用户提供地址、绑定、服务协定等6.了解一下元数据的知识,mex是元数据的地址,固定格式:binding=”mexHttpBinding”,contract=”IMetaExchange”;,如果没有元数据,则服务不能被发现。
2012年4月5日星期四1.未解决问题对IIS进行了初步学习,但不深入2.重新学习了承载服务的视频,但在实践时出现问题,上网搜索答案没有得到解答3.IIS中承载没有调试成功,出现如下错误4.关于承载服务,想了想主要是在IIS中没有实现对服务的正确配置,而VS2010自托管不用IIS功能,很轻松就能实现5.还有WAS承载也不是很熟悉6.没有解决关于IIS承载的问题,明天继续吧!!!二〇一二年四月七日星期六1.下午15:49使用另外一种方式终于调试出界面继续出现如下错误:解决办法:把集成模式改成经典模式即可解决方法:.net版本由2.0变成4.0即可解决方法:1.检查IIS是否注册了指定版本的.NET Framework,如果没有,就使用asp_regiis -i命令注册。
2.IIS的根节点->右侧“ISAPI和CGI限制”->把禁止的DotNet版本项设置为允许,即可/u/20100816/10/7fe71b4a-e227-495b-94eb-202b7046bcae.html二〇一二年四月八日星期日1.调试WCF视频“承载服务”时出现如下错误:解决方法:将11行往下移到class头上即可。
最终解决前几天遇到的问题:出现新的问题:在尝试打开web.Config时出现问题,不能打开,需要进一步探索!!!关于数据协定的排序问题:二〇一二年四月九日星期一上午:消息协定对应于SOAP [MessageContractAttribute]Message类的学习:创建消息、读取消息、写入消息二〇一二年四月十日星期二详解传输:选择传输方式、选择消息编码器Net.TCp端口共享:事务:二〇一二年四月十一日星期三上午进行了视频部分的最后学习,下午进行相关论文阅读,找出入手点:1.WCF原名Indigo2.AJAX(Asynchronous JavaScript and XML):创建交互式网页应用的网页开发技术。
3.将AJAX应用到WCF框架中,实现两者的交互。
4.在Win32中,应用程序是运行在进程的线程中,.Net平台出现之后,出现了Application Domain,其实在进程和线程之间又有了一层包装,类似于子进程概念。
5.JSON:JavaScript Object Notation6.战场用户的分散性和其原有系统的异构性以及未来系统能够方便地进行更新、升级和集成,要求具有灵活的系统架构和较为松散的耦合度,实现分布式并且跨越不同平台。
7.同一局域网内,采用具有较高访问效率的TCP协议来传输SOAP包,对于非同一局域网上的服务和应用程序,采用HTTP协议的Web服务访问技术。
8.两种方式开发数字化校园:以应用和数据的集中达到信息的共享;采用面向服务的SOA架构,整合现有的以及将来需要建设的应用和服务。
9.软件架构具备下列三个特征:松耦合性、位置透明性、协议独立。
10.一个WCF服务有三大部分组成:宿主、服务类和端点。
宿主即WCF服务运行的环境,服务类一般是一个申明了[servicecontract]的接口。
端点是用来通讯的:A B C11.客户端要访问WCF服务必须通过代理,微软命令行工具ServiceModel Metadata Utility Tool(Svcutil.exe)来生成客户端代理的代码。
12.WCF实践中所考虑的几个问题:构建WCF路由器、传输安全性配置、传输大数据量时的效率改进;与其他平台开发的Web服务交互。
13.与其他平台的应用程序(Java应用程序)访问WCF服务时,WCF服务端点中的绑定只能选用BasicHttpBinding,否则会发生错误。
14.15.WCF客户端与服务器的通信是基于SOAP的方式进行的16.WCF的缺点很明显:信道通信只能基于.Net运行时环境进行,业务处理层开发环境只能是.NET开发环境;必须依附于某个宿主进程,使得与其进行WCF信道通信的服务进程间会形成某种依存关系,与SOA设计中松散耦合系统设计的要求相背离;非高级设计人员很难实现优化的系统的设计,使得WCF的实际使用效能大打折扣。
17.WCF是.NET3.0的组成部分之一。
18.客户端的开发主要包括实现客户端代理与配置文件、客户端的回调接口契约的实现以及客户端的窗体界面和Web界面的设计与代码逻辑实现。
19.WCF充分地体现了运行时环境的概念,整个.NET Framework就是一个大的宿主,就像Java 虚拟机一样。
2021.22.基于SOA的WCF技术作为分布式计算的一种新技术可以有效地解决跨平台应用程序的集成问题。
23.24.组合服务封装过程:服务复用是指服务组合和服务编排,以不同的组合和编排方式将细粒度组合成功能更强的粗粒度服务。
25.使用AJAX的优势:通过后台与服务器实现少量的数据交换从而使前段Web页面感觉起来更具响应性,每当用户做出一个改变时,不必重载整个Web页面,最终目的是进一步提高Web页面的交互性、响应速度以及可用性。
26.AJAX是WCF服务最好的技术组合。
27.二〇一二年四月十二日星期四1.2.运行简单的WCF工作流服务成功Silverlight3.安装StockTrade出现问题,暂时没有得到解决:下一话题:二〇一二年四月十三日星期五1.安装SQL2005的记录2. 3.4.密码:1235. 6.7.8.9.成功运行1011运行WCF运行程序给我的感觉是速度慢!!!2012年4月15日星期日1.WCF架构图:2.客户端:通过代理来接收宿主端提供的服务,而客户端的代理拥有和宿主端服务相同的接口。
3.4.实际架构:数据源层(操作数据层):包括关系数据库以及文本中的业务信息数据1.WCF是Vista操作系统的核心技术,也是.NET战略的重要组成部分,可以高效地开发分布式应用。
2.WCF客户端与服务端通过消息在匹配的访问点之间进行交互,基于消息的通信机制也是SOA的特点。
将服务接口(即WCF服务契约)与服务实现分离,客户端与服务端之间共享的是服务接口,而不是代码降低了服务层与业务逻辑层的耦合度。
3.服务接口采用标准的WSDL语言进行描述,充分支持WS*标准,具有良好的平台、语言无关性。
4.5.Endpoint是WCF实现通信的核心要素。
6.通过address知道消息发送的地址,通过binding知道怎样来发送它,通过contract知道发送的消息是什么!7.8.由于2004和2005 两年间,最常用的散列算法MD5和SHA-1被山东大学的王小云教授破解9.WCF将微软所支持的分布式技术整合到一起,解决了不同网络和应用环境下的数据和操作的共享以及异构系统间的跨平台访问与操作等问题。
10.WCF并非是各种技术的简单的并集,是真正的面向访问的产品。
11.12.WCF是不是Web服务???13.WCF不仅包含了Web Service技术,而且改进了Web Service存在的一些不足。
14.(1)性能优化:传统的web services只支持Text编码方式,WCF还支持二进制和MTOM编码。
根据微软发布的WCF性能测试报告,指出WCF比传统Web Services快25%-50%15.(安全性)16.访问点中的地址(address)到底指什么啊?:定义服务位于何处?17.WCF消息安全机制保证端对端的通信安全,弥补了传输安全点对点的不足18.RIA技术19.Sliverlight是WPF的在WEB应用上的分支。