初识WCF之使用配置文件部署WCF应用程序
二月份的开头,小编依旧继续着项目开发之路,开始接触全新的知识,EF,WCF,MVC等,今天小编来简单的总结一下有关于WCF的基础知识,学习之前,小编自己给自己提了两个问题,WCF是什么?WCF能用来做什么?WCF具有哪些优点?带着这样的问题,小编开始进行了一番搜索,一下是小编整理的结果。
WCF是什么?
WCF(Windows Communication Foundation)是用于构建面向服务的应用程序的框架 ,是由微软发展的一组数据通信的应用程序开发接口。根据MSDN上的定义:WCF为.NetFramework提供了一个基础,使其能够编写代码,以在组件、应用程序、系统之间进行通信。WCF的设计遵循的是面向服务的原则。服务是指可以通过消息与之进行交互的一段代码。服务是被动的。它们等待传入消息之后才开始工作。客户端是发起者,客户端将消息发送给服务来请求工作。
WCF能用来做什么?
小编查阅了相关资料,形成了小编自己的对wcf能用来做什么的认识,也许不是很恰当,有不同意见的小伙伴可以相互交流讨论,说个小故事,long time ago,有一户人家,拥有一家小商店,靠卖些花卉过日子,日子不算富裕,但也是吃得饱,穿得暖,可是随着社会的飞速发展,竞争是如此激烈,为了生存,这家人不得不自己进货,把货堆到自己的房间内,如果顾客需要,他们有时还不得不给顾客送货,总而言之,他们将所有该干的活都干了,只为了能赚钱养家,这就是生活。再说我们的程序,一个web程序或者一个winform程序,简单模式的程序,我们通常都与那个花店的老板一样,把所有的功能都集中到这个程序里面,在简单的状况下,这很好。
花店生意越来越好,老板的资金慢慢雄厚了,她注意到了卖其他东西比花卉更赚钱,比如说家电、服装。于是,老板一口气又开了几家店。生意规模越来越大,钱也越赚越多,老板心花怒放。然而好景不长,亚洲金融风暴来袭,利润率急剧下降。老板忧心忡忡,既然外部开源不太可能,那就看看内部能不能节流了。老板考察一番,注意到,为了销售,每个店都配置了一个仓库,每个店都配置了一帮送货的人马,这,是不是太浪费了。于是,老板将所有的仓库撤销,成立了一个总仓库,不管是花卉,家店,服装,都可以存储到这个仓库。管理一个仓库的费用比管理N个仓库的费用显然是要少很多的。然后,每个店的送货人员都辞掉,另外成立一个运输公司,专门负责送货,不管是花卉还是家店亦或服装,装到纸箱后,她们都是一个样。经过这么一折腾,成本一下就降了下来,而且还便于管理了,真是一举两得,老板又绽放了笑容。再回到我们的程序上来,当程序涉及的范围越来越大时,也许就要考虑将服务分离出去。WCF是应对分布式开发的,就如花店老板,生意大了后,她就是个分布式的了,这边一家花卉店,那边一家服装店,他们之间有区别,卖的东西不同,也有共性,都是卖东西,不管是哪家店,他们都需要仓库,都需要送货。这时,你就可以单独成立公司,只提供这两种服务。如果写成程序,那么就如同你开发了一个运输的WCF,把这个服务放在服务器上,这样不管是谁,是Web程序也好,是Winform程序也好,只要接口对应,理解你的服务内容条款(服务契约),都可以要求你这个服务模块提供标准的服务。
WCF的优点?
WCF是提供统一的,可用于建立安全、可靠的面向服务的应用的高效开发平台。WCF具有如下的优势:
1、统一性
2、互操作性
3、安全与可信赖
4、兼容性
介绍完了wcf的一些基本知识以后,我们开始来实践一下,让理论知识在动手实践中牢牢掌握,小编简单来介绍一下如何使用配置文件部署WCF应用程序,在敲例子之前,先来简单介绍一个基本知识点服务三要素和配置服务概要。服务三要素,简单概括来说就是ABC,A--Adress在哪里,包含传输方式信息;B--Binding怎么实现,与地址的传输方式要匹配,C--Contract做什么,服务契约。好了接着,我们开始敲例子,打开VS建立项目,建立完成之后,如下图所示:
接着,我们来编写代码,首先我们来编写WCFServiceDemo中的接口,代码如下:
<span style="font-size:18px;"><span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.ServiceModel;
namespace WCFServiceDemo
{
[ServiceContract] //定义服务接口
public interface IHelloService
{
[OperationContract]
//返回当前服务器端的时间
DateTime getDateTime();
[OperationContract]
//返回一组数据
DataTable getUserInfo();
}
}
</span></span>
WinformHello中的HelloService,代码如下所示:
<span style="font-size:18px;"><span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks;
using WCFServiceDemo;
namespace WinformHello
{
public class HelloService:WCFServiceDemo.IHelloService //实现接口
{
//获取服务端的系统时间
public DateTime getDateTime()
{
return DateTime.Now;
}
//获取当前用户信息
public System.Data.DataTable getUserInfo()
{
//创建连接对象
string connstring = @"Data Source=.;Initial Catalog=newssystem;User ID=sa;pwd=123456";
SqlConnection conn = new SqlConnection(connstring);
SqlDataAdapter sda = new SqlDataAdapter("select * from category", conn);
DataTable dt = new DataTable();
sda.Fill(dt);//通过Fill方法将数据填充
return dt;
}
}
}
</span></span>
接着就是我们的配置文件了,代码如下:
<span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <service name="WinformHello.HelloService" behaviorConfiguration="TestBehavior"> <host> <baseAddresses> <add baseAddress="http://localhost:8080/Hello"/> </baseAddresses> </host> <endpoint address="" binding="basicHttpBinding" contract="WCFServiceDemo.IHelloService"></endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="TestBehavior"> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration></span></span>
运行效果如下:
注意,在运行这个程序的过程中有可能会出错,这个时候只需要,右击vs的快捷方式,以管理员方式运行即可,重新运行程序即可,成功加载。
小编寄语:该博文,小编主要简单的介绍了一下有关于wcf的一些基础知识,首先解决了三个基本问题,wcf是什么?用来干什么以及wcf的优点,最后使用配置文件部署了一个wcf的应用程序,由于wcf集合了几乎.NET Framework 所提供的通信方法,因此学习曲线比较陡峭,开发人员必须要针对各个部份的内涵做深入的了解,才能够操控 WCF
来开发应用程序。通信双方的沟通方式,由合约来订定。通信双方所遵循的通信方法,由协议绑定来订定。通信期间的安全性,由双方约定的安全性层次来决定。项目进行中,未完待续......
初识WCF之使用配置文件部署WCF应用程序的更多相关文章
- WCF(二) 使用配置文件实现WCF应用程序
服务三要素ABCA:Address 在哪里 (包含传输方式的信息)B:Binding 怎么实现(与地址的传输方式要匹配)C:Contract做什么(服务契约) namespace WCFService ...
- WCF学习之旅—WCF服务部署到应用程序(十)
上接 WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...
- 宿主iis部署wcf
WCF学习笔记(4)——宿主iis部署wcf 本文将部署一个wcf+silverlight简单实例,以下是详细步骤: (环境:服务端win2003,iis6.0,asp.net4.0:客户端winXP ...
- IIS 部署WCF时遇到这么个错:
转(http://blog.csdn.net/vic0228/article/details/48806405) 部署WCF时遇到这么个错: "The service cannot be a ...
- IIS部署WCF
IIS部署WCF [转载自——http://www.cnblogs.com/starksoft/p/4992059.html] 1 部署IIS 1.1 安装WAS IIS原本是不支持非HTTP协议的服 ...
- IIS 部署WCF服务注意事项
IIS部署WCF服务的时候经常会出现如下错误: System.ServiceModel.EndpointNotFoundException”类型的未经处理的异常在 WinformWcfHost.exe ...
- IIS8.0 部署WCF Services
今天在Win 8的IIS上部署WCF Services,访问SVC文件时出现找不到处理程序的错误,以前遇到这个问题时都是尝试通过注册asp.net的方式处理一下,但是在Win8下这招不灵了,出现如下提 ...
- WCF学习系列二---【WCF Interview Questions – Part 2 翻译系列】
http://www.topwcftutorials.net/2012/09/wcf-faqs-part2.html WCF Interview Questions – Part 2 This WCF ...
- WCF学习系列一【WCF Interview Questions-Part 1 翻译系列】
http://www.topwcftutorials.net/2012/08/wcf-faqs-part1.html WCF Interview Questions – Part 1 This WCF ...
随机推荐
- jmeter正则表达式书写
在测试过程中,经常会有以下几种场景,如A接口的返回值,用于B接口中,而且A登陆的账户,每次登陆,这个sid值还是变化的.那么在实际工作中,如何才能A接口中提取参数到B接口中?接下来我们就可以用正则表达 ...
- ZH奶酪:Ionic中(弹出式窗口)的$ionicModal使用方法
Ionic中[弹出式窗口]有两种(如下图所示),$ionicModal和$ionicPopup; $ionicModal是完整的页面: $ionicPopup是(Dialog)对话框样式的,直接用Ja ...
- 利用Express模拟web安全之---xss的攻与防
一.什么是XSS? 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意 ...
- NVIDIA Titan Xp Star Wars Collector's Edition显卡深度学习工作站 + Ubuntu17.10 + Tensorflow-gpu + Anaconda3 + Python 3.6 设置
为了能让 Tensorflow GPU 版本跑起来,我折腾了1个多星期. 总体参照 https://zhuanlan.zhihu.com/p/32118549 ,安装成功,但还是有不足的地方, 在此记 ...
- Hadoop系列:(一)hdfs文件系统的基本操作
可以执行所有常用的Linux文件操作命令(读取文件,新建文件,移动文件,删除文件,列表文件等) 1.help命令获取没个命令的帮助 [cloudera@quickstart ~]$ hadoop fs ...
- 监控undo空间和临时段的使用情况
--1.监控undo空间情况 ),) free_space from dba_free_space where tablespace_name='UNDOTBS1' group by tablespa ...
- 毕业论文内容框架指导-适用于MIS系统
摘要: 背景.要做什么.选用什么技术.按照什么过程.原理.或者步骤去做.最后做出了什么东西.做出来的东西有什么用. 1. 前言 系统的背景与意义:为什么要做这个系统 ? 现状调查:别人做的怎么样? 系 ...
- 一小时入门PHP
[版权申明:本文系作者原创,转载请注明出处] 文章出处:[http://blog.csdn.net/sdksdk0/article/details/52332296](http://blog.csdn ...
- lua 序列化函数
local function f( ... ) print('hello') end local x = string.dump(f, true) loadstring(x)()
- Redis之(一)初识Redis
1.Redis概述 我们知道,内存是电脑主板上的存储部件,用于存储当前正在使用的数据和程序,CPU可以与内存直接沟通,所以访问速速非常高:而外存数据必须加载到内存以后程序才能使用.如果把CPU当做一个 ...