图书馆借阅了《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. piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql

    piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql 需要不个mssql的sql文件导入mysql.他们的时间戳格式不同..ms用的是自定义的时 ...

  2. MYSQL操作数据表中的记录

    36:操作数据表中的记录插入记录   INSERT INTO 表名  VALUES();   或者INSERT 表名  VALUES();  UPDATE更新记录(单表更新)  DELETE删除记录( ...

  3. Leetcode 119 Pascal's Triangle II 数论递推

    杨辉三角,这次要输出第rowIndex行 用滚动数组t进行递推 t[(i+1)%2][j] = t[i%2][j] + t[i%2][j - 1]; class Solution { public: ...

  4. JavaScript的for循环编写九九乘法表

    for(var i = 1; i <= 10; i++) { for(var j = 1; j <= i; j++) { document.writeln(i + '*' + j + '= ...

  5. Reorder List

    题目: Given a singly linked list L: L0→L1→-→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→- You must do ...

  6. Android显示等宽图片的问题

    安卓开发常遇到一个问题,就是在listView里面,在不知道图片宽高的前提下,另图片布满屏幕(图片宽度等于屏幕宽度,高度自适应).在listView中,只是设置scaleType,imageView. ...

  7. FindFriendsServer服务搭建

    本文介绍如何搭建FindFriendsServer(https://github.com/hnrainll/FindFriendsServer)所需的环境. 环境需要: Windows+Apache+ ...

  8. Activiti 流程实例、任务、执行对象及相关的表

    一个流程中,流程实例只有一个,执行对象可以有多个(如果存在分支和聚合) SELECT * FROM activiti.act_ru_execution a;  #正在执行的执行对象表 SELECT * ...

  9. Python 实现有道翻译命令行版

    一.个人需求 由于一直用Linux系统,对于词典的支持特别不好,对于我这英语渣渣的人来说,当看英文文档就一直卡壳,之前用惯了有道词典,感觉很不错,虽然有网页版的但是对于全站英文的网页来说并不支持.索性 ...

  10. 在VisualStudio中应该使用什么字体

    转自:http://blog.csdn.net/bclz_vs/article/details/6607695 字体通常分为几个主要类型 San-Serif:无衬线字体 Serif:有衬线的字体 Mo ...