图书馆借阅了《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. 1.契约    
  2. 数据契约

消息契约       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学习日记的更多相关文章

  1. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  2. Linux学习日记-使用EF6 Code First(四)

    一.在linux上使用EF 开发环境 VS2013+mono 3.10.0 +EF 6.1.0 先检测一下EF是不是6的 如果不是  请参阅 Linux学习日记-EF6的安装升级(三) 由于我的数据库 ...

  3. WCF学习之旅—第三个示例之二(二十八)

    上接WCF学习之旅—第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1)  使用NuGet下载最新版的Entity Fram ...

  4. WCF学习之旅—第三个示例之三(二十九)

    上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...

  5. WCF学习之旅—WCF服务部署到IIS7.5(九)

    上接   WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...

  6. WCF学习之旅—WCF服务部署到应用程序(十)

    上接  WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...

  7. WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...

  8. WCF学习之旅—WCF服务的WAS寄宿(十二)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...

  9. WCF学习之旅—WCF服务的批量寄宿(十三)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) WCF学习之旅—WCF ...

随机推荐

  1. paip.最省内存的浏览器评测 cah

    paip.最省内存的浏览器评测 cah 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/at ...

  2. paip. 混合编程的实现resin4 (自带Quercus ) 配置 php 环境

    paip. 混合编程的实现resin4 (自带Quercus ) 配置 php 环境 #---混合编程的类型 1.代码inline 方式 2.使用库/api  解析方式. #----配置resin 支 ...

  3. 运用JMX监控Tomcat/Java jvisualvm简要说明

    公司线上项目出现了java heap space 然后经过查询知晓了下面工具于是开始了尝试. visualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存.cpu分析,线程分析... jvisua ...

  4. python基于LeanCloud的短信验证

    python基于LeanCloud的短信验证 1. 获取LeanCloud的Id.Key 2. 安装Flask框架和Requests库 pip install flask pip install re ...

  5. Java band [Cite]

    SampleModel  取样模型Databuffer 数据缓冲区 Raster 光栅Sample 样本band  带 SampleModel是java awt中的一个抽象类,它定义了一个接口,用于提 ...

  6. 关于linux curl 地址参数的问题

    例如 url 为 http://mywebsite.com/index.PHP?a=1&b=2&c=3web形式下访问url地址,使用$_GET是可以获取到所有的参数然而在Linux下 ...

  7. 关于启明星系统(OA系统,预定系统,请假系统等)安全性的说明

    启明星系统推荐是安装在内网里,因此,系统采用了较为简单的身份验证. 事实上,在访问页面时,系统会判断当前cookie的uid是否大于0,如果是,则表示用户已经登录,否则表示未登录. public st ...

  8. OpenCV相机标定和姿态更新

    原帖地址: http://blog.csdn.net/aptx704610875/article/details/48914043 http://blog.csdn.net/aptx704610875 ...

  9. JAVA B/S系统实现客户端屏幕截图,Java版的QQ截图

    简介:本方法首先需要抓到屏幕的整个图象,将图象显示在一个JFrame中,再将JFrame全屏显示,这样就模拟出了一个桌面,Java也就可以获得鼠标的作用区域从而实现桌面中的小范围截屏.Java实现QQ ...

  10. Moccakids-Tangram Puzzle 限免啦!

    圣诞前上线的App,Tangram Puzzle 限免,大家去下载玩玩. 介绍网站:http://www.mokamisu.com/ App Store:https://itunes.apple.co ...