图书馆借阅了《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. js手风琴图片切换实现原理及函数分析

    关键词: js手风琴 js百叶窗 js百页窗 实现原理解读 使用两层for循环实现, 第一层有三个功能,分别给第个li: 添加索引 预设位置 添加事件 第二层有两个功能,整理图片位置: 鼠标的li,以 ...

  2. Atitit 三论”(系统论、控制论、信息论

    Atitit 三论"(系统论.控制论.信息论 1. 系统论的创始人是美籍奥地利生物学家贝塔朗菲1 2. 信息论是由美国数学家香农创立的,2 3. 什么是控制论? 2 1. 系统论的创始人是美 ...

  3. 安装 Autoconf 2.69版

    发生错误configure.ac:8: error: Autoconf version 2.64 or higher is required 1.检查版本 [root@localhost Deskto ...

  4. HTML之总结

    基础结构 基础标签有HTML,head,body. 合格的的HTML页面: <!DOCTYPE html> <html lang="en"> <hea ...

  5. Delphi 如何让程序获取权限结束指定进程?

    比如说让程序结束进程中360sd.exe 获取权限,否则会拒绝访问, 要怎么写?   补充: 这段代码中……点击按钮后结束不了360进程! unit Unit1;interfaceusesWindow ...

  6. 移动平台自动化测试从零开始-MonkeyRunner工具使用 (第二节)

    选自:http://yuedu.baidu.com/search?word=%D3%DA%D3%BF&pbook=0 第2节  MonkeyRunner 安装部署 如果您已经正确的安装部署了A ...

  7. GET请求中URL的最大长度限制总结

    由于jsonp跨域请求只能通过get请求,url长度根据浏览器及服务器的不同而有不同限制. 若要支持IE的话,最大的长度为2083字符,若是中文字符的话只有2083/9=231个字符. 若是Chrom ...

  8. 小白学数据分析----->留存率与运营活动分析_I

    有关留存率的事情最近扯得比较多,因为在分析数据的时候,越发觉得,分析一定是要来解决问题的,留存率不知何时突然变得流行了,在此讨论留存率倒不是因为流行,而是觉得以留存率为核心,的确是可以帮助我们解决不少 ...

  9. 2015想做O2O?那就来看看O2O报告!

    来源:互联网

  10. 小数量宽带用户的福音,Panabit 云计费easyradius 接口隆重发布,PA宽带计费系统

    PA接口在早前就发布了,但是一直迟迟没有发布官方说明文档,由于最近问的客户较多,特写了这篇文档 由于PA使用标准radius认证协议,所以用户需要在本地搭建一个计费,由于大部分用户的数量只有几百个,不 ...