WCF学习日记
图书馆借阅了《WCF高级编程》,从6.11开始学习wcf,希望尽快熟悉原理和编程模型以及常用编程方法。
WCF是一个平台,也是一个框架,从Net.3.0 就在Net framework(无需安装) 。WCF将服务以SOA架构对外使用。SOA的宗旨就是让应用程序成为一个接口可以供其余程序使用。比如图书订单管理系统,订单履约系统,ship系统,会计系统,以及其它系统,每个都是一个独立的系统,但是彼此系统应该作为接口供别人使用,这样即使扩展了服务或者改善了服务也不会影响原先的体系架构和业务规则。
WCF类似之前的ASP.NET 服务(*.asmx)和remoting,还有ws(web服务增强,MSMQ微软消息队列等)。 remoting都是在远端建立对象,而不是在本地建立对象。
下面是WCF中的一些概念以及原理
- 1.契约
- 数据契约
消息契约 soap信封,soap头,soap体
服务契约
行为契约
契约就相当于现实生活中的合同。假如买方和卖方之间的合同,需要对产品的质地和零件有限制(数据契约),消息契约(产品完成后,怎样将所有产品交到我手里,物流公司还是卖家自有的车送上门还是买家上门取),服务契约约定卖家要提供什么服务。
2.编程模型
面向服务编程 (松耦合编程,但是同样要面向对象)。而面向对象编程很多类耦合比较小(紧耦合),所有类更同组成一个系统。
服务要自治 自己管理自己,要注意版本控制
编程用到 System.ServiceModel; 注意net2.0 以下无法引用到此类库,引用窗口找不到。只要net 3.0以上的才可以引用,一定要注意项目的生成版本是什么版本必须3.0以上。
3种编程。声明式编程(接口或类上添加属性特性来编程),显示编程(diy code),配置文件(好处不用重新编译,但是如果是在IIS中应该会断掉服务把)
3.宿主
windows active service ---windows激活服务,装有此服务上的计算机上可以自动启动wcf 服务
可以做为exe可执行程序启动
windows 服务
msmq???
4. net 3.0 推出system.transaction事务,可以向数据库一样将代码集合作为一个整体提交或者回滚。
事务的4要素:原子,一致,永久,
---------------------------------------------------------------------------------------------
开始编程-
下面是根据书中的代码做的例子
新建网站2.0下的空web服务(删除*.asmx),(新建窗口指向文本文件,修改文件名后缀*.svc)新建空的Service.svc(appcode自动添加一个Service.cs),最后修改web.config,再建立个windows 客户端调用此服务
Service.cs是具体的代码,Service.svc(里面添加一段代码用来指定路径)
Service.svc空文件中新加入的代码 ,定义此服务的名字为MyWCFService
<%@ ServiceHost Language="C#" Debug="true" Service="MyWCFService" CodeBehind="~/App_Code/Service.cs"%>
Service.cs文件
[ServiceContract] --服务契约,定义在一个接口上
public interface IMyWCFService
{
[OperationContract] --行为契约
string Operation1(string myvalue);
}
public class MyWCFService : IMyWCFService
{
public string Operation1(string myvalue)
{
return "hello: " + myvalue;
}
}
web.config中的代码
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.serviceModel>
<services>
<service name="MyWCFService" behaviorConfiguration="returnFaults">
<endpoint contract="IMyWCFService" binding="wsHttpBinding" address="http://127.0.0.1/service.svc"/>
</service>
</services>
<behaviors>
<!--<behavior name="returnFaults">
<serviceMetadata httpGetEnabled="true"/>
</behavior>-->
<serviceBehaviors>
<behavior name="returnFaults">
<serviceMetadata httpGetEnabled="true"/>
<!--开启元数据发布-->
</behavior>
</serviceBehaviors>
<!--<endpointBehaviors>
</endpointBehaviors>-->
</behaviors>
</system.serviceModel>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>
</configuration>
至此服务的宿主在IIS中布置完毕了,打开http://127.0.0.1/service.svc, 看到下图服务已经建立好
打开 http://127.0.0.1/Service.svc?wsdl ,可以看到服务描述语言(和asp.net服务很像)
winform中引用服务
客户端将服务名ServiceReference1,编程的时候就代码服务名,然后通过服务名找到具体的类和操作。(客户端的app.config也可以查看到一些服务信息)
windows客户端有个按钮和文本框,实现点击按钮从服务获取内容后在文本框中显示
private void button1_Click(object sender, EventArgs e)
{
ServiceReference1.MyWCFServiceClient wcfService1 = new ServiceReference1.MyWCFServiceClient();
//wcfService1.Open();
textBox1.Text = wcfService1.Operation1("哈哈");
//wcfService1.Close();
}
代码是客户端调用宿主为IIS的服务。
至此第一个wcf代码已经完成
WCF学习日记的更多相关文章
- WCF学习之旅—第三个示例之四(三十)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) ...
- Linux学习日记-使用EF6 Code First(四)
一.在linux上使用EF 开发环境 VS2013+mono 3.10.0 +EF 6.1.0 先检测一下EF是不是6的 如果不是 请参阅 Linux学习日记-EF6的安装升级(三) 由于我的数据库 ...
- WCF学习之旅—第三个示例之二(二十八)
上接WCF学习之旅—第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1) 使用NuGet下载最新版的Entity Fram ...
- WCF学习之旅—第三个示例之三(二十九)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...
- WCF学习之旅—WCF服务部署到IIS7.5(九)
上接 WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...
- WCF学习之旅—WCF服务部署到应用程序(十)
上接 WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...
- WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...
- WCF学习之旅—WCF服务的WAS寄宿(十二)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...
- WCF学习之旅—WCF服务的批量寄宿(十三)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) WCF学习之旅—WCF ...
随机推荐
- crossplatform---Nodejs in Visual Studio Code 05.Swig+Bootstrap
1. 开始 准备好Express+Swig的练习代码:https://github.com/Mengkzhaoyun/nodepractise 准备好AdminLTE后台管理模版:https://ww ...
- LR11.0 下载及破解
1. 把loadrunner相关程序全部退出:2. 用LR8.0中的mlr5lprg.dll.lm70.dll覆盖LR安装目录下“bin”文件夹中的对应文件:3. 清理注册表(不清理的话,在添加lic ...
- Help Viewer 2.2 独立运行
"C:\Program Files (x86)\Microsoft Help Viewer\v2.2\HlpViewer.exe" /catalogName VisualStudi ...
- Leetcode-121 Best Time to Buy and Sell Stock
#121 Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price ...
- AndroidStudio的一些坑
以下环境为Android Studio 1.3.2,Gradle 2.7(as自带2.4,另下载的2.7) 编译时提示Multiple dex files define: Lcom/sina/weib ...
- 从此爱上iOS Autolayout
转:从此爱上iOS Autolayout 这篇不是autolayout教程,只是autolayout动员文章和经验之谈,在本文第五节友情链接和推荐中,我将附上足够大家熟练使用autolayout的教程 ...
- Avizo - 高级三维可视化及分析软件
今天从材料科学应用角度介绍Avizo的基本功能. Avizo是一款先进的三维可视化及分析应用,可用来探索从断层扫描.显微镜.核磁共振成像及更多其他技术获得的材料科学数据.从简单的可视化与测量到高级的图 ...
- MAC下的命令操作
打印环境变量:echo $PATH设置环境变量:export PATH=$PATH:/usr/local/git/bin应用:在git-scm下载git2.0.1版本,图形安装后,直接在终端敲giv ...
- vc 实现打印功能
Visual C++6.0是开发Windows应用程序的强大工具,但是要通过它实现程序的打印功能,一直是初学者的一个难点,经常有朋友询问如何在VC中实现打印功能,他们往往感到在MFC提供的框架内实现这 ...
- Hibernate不调用update却自动更新
案例: TInfCustomer cus = (TInfCustomer) this.baseDao.getOne(helper); cus.setXXX cus .setXXX 不调用update也 ...