由于我们的软件是一个能够通过学生ID来获取学生姓名的小程序,所以,首先必须得有一个StudentInfo实体类:
在这个实体类中,DataContract代表数据契约,DataMeber代表数据成员,加上这些Attribute后,能够传送给Client端。
然后是一个接口,这个接口定义了服务契约和 *** 作契约:
然后是具体的实现方法:
这个方法里,我们有两个函数,一个能够根据学生点获取学生全名,另一个是根据学生点获取学生的实体对象。
好了,让我们来编译这个项目,得到一个WCFServiceGeneratedByConfig.exe文件。
然后,我们需要配置文件来让服务器端启动,所以这里我们要用WCF Service Configuration Editor
工具来进行,由于在VS2008 和VS2010中带有这个软件,我们可以直接通过菜单->Tools->WCF Service Configuration Editor来打开。
首先,点击File->New config, 打开Service的Configuration界面。
然后,点击Create a new service…,在d出的界面中,我们选择刚才生成的那个WCFServiceGeneratedByConfig.exe文件。双击之后,软件自动显示出了里面含有的Service:
点选那个Service,然后点击两次next,我们会看到出现了选择Communation Mode的界面,这里由于我们用的是net.tcp,所以我选择了第一个:TCP。
然后点击Next,我们会看到要我们填写EndPoint,这里我随便填写了一个:
之后,点击Next知道Finish,然后,我们的最基本的配置就结束了。
回到Config界面之后,我们点击Advanced->Service Behaviors->New Service Behavior Configuration,在d出的界面中,我们点击Add->serviceMetadata:
然后点击Add,我们就添加了一个Behavior Element。点击刚刚生成的serviceMetadata节点,在显示的界面中,设置HttpGetEnabled为true。
然后点击原来的Service节点下的Host节点,在Base Address栏目下单击Add,添加如下的Base Address:
最后点击OK。然后点击菜单File->Save As 保存到项目文件夹下即可。
这里是生成的代码:
这一步做完后,我们需要让服务能够启动,怎么启动呢?请看下面的代码:
代码中的注释部分非常重要,我们一定要添加,否则下面的步骤不能进行,具体的原因,参加我的另一篇文章:在net.tcp模式下,由SvcUtil.exe生成代理类文件和配置文件
然后运行这个ConsoleApplication。
接下来,找到SvcUtil.exe,C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\SvcUtil.exe,在CMD窗口下运行如下命令:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\SvcUtil.exe net.tcp://127.0.0.1:50001/StudentServiceEndPoint
这样,这个小工具就会自动的给我们生成代理类和配置文件
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation,版本 3.0.4506.2152]
版权所有(c) Microsoft Corporation。保留所有权利。
正在尝试使用 WS-Metadata Exchange 从“net.tcp://127.0.0.1:50001/StudentServiceEndPoint”下载元数据。此 URL 不支持 DISCO。
正在生成文件...
E:\WCF\WCF_ChatRoom\StudentService.cs
E:\WCF\WCF_ChatRoom\output.config
请按任意键继续. . .
接下来,新建一个WindowsFormsApplication程序,将这个代理类拷入,配置文件修改名称为App.config拷入,
然后在Form1.cs中拖入一个文本框,一个按钮,一个DataGridView,后台代码如下:
启动这个实例,输入学生ID,我们成功得到了服务端返回的值。
那么能不能在公网上使用呢?呵呵,这个当然,将服务端拷贝到外网的一台机器上,然后修改服务器端的配置文件中的地址为:net.tcp://169.*.*.124:50001/ StudentServiceEndPoint,然后将本机的配置文件中的地址也修改为这个,最后运行,依然能够得到返回的结果。
你可以在1、WCF上提供方法Byte[] DownLoadFile(),在方法里面读取到Setup.zip文件,然后把文件转换为2进制数组返回出来。
2、在客户端调用DownLoadFile()方法获取到数组,并把数组转换成文件,保存在当地的某个位置。
wcf的寄宿方式多种多样,今天我们一起来探讨一下windows 服务的寄宿方式,其实明白了控制台的寄宿方式,在windows下的寄宿方式也是一样,只不过是 *** 作方式有点区别。编程代码基本是一样的。
我们首先创建一个window 服务应用程序,然后在service1.cs设计界面中添加安装程序,这些都是我们创建windows服务应用程序应该熟知的步骤,我就不再赘述了,我们需要做的就是把控制台程序中的添加服务宿主的代码拷贝到windows服务应用程序中。
复制代码
1 protected override void OnStart(string[] args)
2 {
3
4 using (ServiceHost host = new ServiceHost(typeof(CalService), new Uri("http //127.0.0 1 9999/calService")))
5 {
6
7 host.AddServiceEndpoint(typeof(ICal), new WSHttpBinding(), "")
8 if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
9 {
10 ServiceMetadataBehavior behavior = new ServiceMetadataBehavior()
11 behavior.HttpGetUrl = new Uri("http //127 0.0 1 999/calService/mex")
12 behavior.HttpGetEnabled = true
13 host.Description.Behaviors.Add(behavior)
14 }
15 if (host.State != CommunicationState.Opening)
16 {
17 host.Open()
18
19 }
20 }
21 }
代码基本没变,唯一变的就是代码放置的位置,我们放置到了windows服务启动的事件中。这样我们就可以在windows服务寄宿的时候,通过浏览器浏览到我们创建的服务元数据。
下面就是安装这个windows服务应用程序了,我们不能像控制台程序那样直接在vs中运行,windows服务应用程序必须安装到 *** 作系统中才可以。我们采用的就是installUtil.exe 这个工具,定位到我们windows程序的目录,然后执行,就可以把服务安装到 *** 作系统中,如果要卸载服务,只需在安装的路径后面添加-u即可卸载。
安装了服务,我们确保服务启动以后,就可以正常在浏览器中浏览了。
上面只是简单介绍了windows服务的编码实现,没有用到配置文件,和控制台程序一样,我不再赘述了。下面说说我为什么要单独把windows服务, *** 作那么简单的单独拿出来说呢:
windows服务可以在系统后台长时间运行,由 *** 作系统控制。
windows服务可以通过管理器方便的暂停、停止、启动,方便管理程序。
最重要的一点就是windows服务是我们开发中常用到的,我们不可能运行一个控制台程序一直在服务器运行,因为不知道哪个人就会关闭掉,安全性较差。
当然了,简单的运行wcf服务在windows服务中还看不出来复杂性,随着项目的复杂,配置项也是方便管理的,因为可以停止、重新启动。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)