服务契约描述了暴露给外部的类型(接口或类)、服务所支持的操作、使用的消息交换模式和消息的格式。每个WCF服务必须实现至少一个服务契约。使用服务契约必须要引用命名空间System.ServiceModel 。
 
ServiceContractAttribute
OperationContractAttribute
 
1,先创建一个类库为ClassLibrary1,在创建一个接口interface1。
2,添加引用和命名空间,System.ServiceModel
3,在接口里代码如下:
namespace ClassLibrary1
{    //服务契约
    [ServiceContract]
   public interface Interface1
    { //操作契约
        [OperationContract]
        string Hello();
    }
}
4,创建一个窗体或控制台程序并创建一个类HelloClass.cs
5,添加引用(项目里面)ClassLibrary1
6,HelloClass1.cs里代码如下

class HelloClass:ClassLibrary1.Interface1
    {

public string Hello()
        {
          return   "Hello wcf!";

}
    }

基本创建一个服务。创建之后需要部署。一般分为配置文件部署和代码部署。

一,配置文件部署
服务的三要素

A:Address 意味着在哪里(也含有传输方式信息)

B:Binding 意味着怎么做(与地址的传输方式要匹配)

C:Contract意味着做什么(服务契约)

<system.ServiceModel>

<services>

<service>

<endpoint/>     /*服务和终结点*/

</service>

</services>

<bindings>     /*绑定(可选)*/

<binding>

</binding>

</bindings>

<behaviors>    /*行为(可选) */

<behavior>

</behavior>

</behaviors>

</system.ServiceModel>

终结点的地址由EndpointAddress 类表示,该类包含一个表示服务地址的统一资源定位符(URI),大多数传输的地址URI 包含四个部分。
例如,

“http://www.sina.com.cn:3200/mathservice”这个URI 具有以下四个部分:

– 方案:http:

– 计算机:www.sina.com.cn

– (可选)端口:3200

– 路径:/mathservice

在上面例题上继续完善,打开app.config文件
<system.serviceModel>
    <services>
      <service name="ConsoleApplication1.HelloClass" behaviorConfiguration="testBehavior"> <!--name为实现该契约的类-->
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8002/test"></add><!--基地址-->
          </baseAddresses>
        </host>
        <endpoint address="" binding="basicHttpBinding" contract="ClassLibrary1.Interface1"></endpoint>
          <!--已有baseAddress基地址,address可为空;binding为绑定类型,对应Http协议;contract为所公开的协议,即所创建的服务契约接口-->
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="testBehavior"> <!--与上面behaviorConfiguration="testBehavior"保持一致,可为空-->
          <serviceMetadata httpGetEnabled="true"/> <!--指定是否要发布元数据以HTTP/Get获取-->
        </behavior>
      </serviceBehaviors>
    </behaviors>
    </system.serviceModel> 
之后需要启动服务
在ConsoleApplication1的program.cs里添加应用和命名空间System.ServiceModel和以下代码

ServiceHost host = null;

host = new ServiceHost(typeof(ConsoleApplication1.HelloClass));
            host.Open();
            Console.WriteLine("服务已经启动!");
            Console.ReadLine();

运行代码后,将http://localhost:8002/test在浏览器打开将会看到相关服务信息。
 
二,代码部署
先创建一个控制台程序 ConsoleApplication2,添加一个类HelloClass.cs和引用及命名空间,服务接口
在program.cs 添加命名空间
            ServiceHost host = null;
            host = new ServiceHost(typeof(ConsoleApplication2.HelloClass));
            NetTcpBinding tcpBind = new NetTcpBinding();//设定绑定类型
            string address = "net.tcp://localhost:3200/hello";
            host.AddServiceEndpoint(typeof(ClassLibrary1.Interface1), tcpBind, address);//在服务终结点添加,协议,绑定类型,终结点地址
            host.Opened += delegate { Console.WriteLine("服务已启动!"); Console.ReadLine(); };
            host.Open();
当服务部署成功后,客户端可以连接服务并调用方法,一般有两种方式
一,如上一节讲的直接添加服务引用来实现
二,纯代码实现
先创建一个客户端,client控制台程序以及相关引用、命名空间、服务接口引用

//绑定形式
            NetTcpBinding bind = new NetTcpBinding();
            //提供客服端与服务建立连接的地址
            EndpointAddress address = new EndpointAddress("net.tcp://localhost:3200/hello");
            //客户端通关通道工厂将消息发送到不同配置的服务终结点
            ChannelFactory<ClassLibrary1.Interface1> factory = new ChannelFactory<ClassLibrary1.Interface1>(bind, address);
            //通过通道工厂对象来获取指定类型
            ClassLibrary1.Interface1 myobject = factory.CreateChannel();
            string s = myobject.Hello();
            Console.WriteLine(s);
            Console.ReadLine();

先启动服务,在运行客户端。

 
 
 
 
 

C# WCF之用接口创建服务契约、部署及客户端连接的更多相关文章

  1. MongoDB的基本操作:服务端启动,客户端连接,CRUD操作

    本文内容: MongoDB的介绍 MongoDB服务端的启动 MongoDB客户端连接 SQL与MongoDB相关概念解释 什么是BSON 数据库操作 集合操作 文档操作 测试环境:win10 软件版 ...

  2. WCF分布式开发步步为赢(5)服务契约与操作重载

    继上一节WCF分布式开发步步为赢系列的(4):WCF服务可靠性传输配置与编程开发,本节我们继续学习WCF分布式开发步步为赢的第(5)节:服务契约与操作重载.这里我们首先讲解OOP面向对象的编程中方法重 ...

  3. C# Socket服务端及多客户端连接通信实现

    服务端代码(控制台示例): static List<Socket> Sockets = new List<Socket>(); static void Main(string[ ...

  4. WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计

    上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依 ...

  5. 跟我一起学WCF(6)——深入解析服务契约[下篇]

    一.引言 在上一篇博文中,我们分析了如何在WCF中实现操作重载,其主要实现要点是服务端通过ServiceContract的Name属性来为操作定义一个别名来使操作名不一样,而在客户端是通过重写客户端代 ...

  6. WCF契约之---服务契约 、数据契约、 消息契约

    本篇博文只是简单说下WCF中的契约的种类.作用以及一些简单的代码示例.在WCF中契约分为服务契约.数据契约和消息契约.下面对这几种契约进行简单的介绍. 服务契约 服务契约描述了暴露给外部的类型(接口或 ...

  7. 一、WCF学习之旅-创建第一个服务

    WCF基本介绍:http://baike.baidu.com/link?url=TGjLYt3HS4dt4-hIiGRknLy6udRsZ52QxJz9cmRKlR4NXbP9rCZDsKn2fDfG ...

  8. WCF服务编程 读书笔记——第2章 服务契约

    操作重载诸如 C++ 和 C# 等编程语言都支持方法重载,即允许具有相同名称的两个方法可以定义不同的参数.例如,如下的 C# 接口就是有效的定义: interface ICalculator { in ...

  9. 跟我一起学WCF(5)——深入解析服务契约[上篇]

    一.引言 在上一篇博文中,我们创建了一个简单WCF应用程序,在其中介绍到WCF最重要的概念又是终结点,而终结点又是由ABC组成的.对于Address地址也就是告诉客户端WCF服务所在的位置,而Cont ...

随机推荐

  1. 使用Python中的NLTK和spaCy删除停用词与文本标准化

    概述 了解如何在Python中删除停用词与文本标准化,这些是自然语言处理的基本技术 探索不同的方法来删除停用词,以及讨论文本标准化技术,如词干化(stemming)和词形还原(lemmatizatio ...

  2. React源码解析——创建更新过程

    一.ReactDOM.render 创建ReactRoot,并且根据情况调用root.legacy_renderSubtreeIntoContainer或者root.render,前者是遗留的 API ...

  3. iOS UmbrellaHeader

    Lexical or Preprocessor Issue - Umbrella header for module 'xxx' does not include header 'xxx.h' fra ...

  4. JS获取HTML DOM元素的方法

    JS获取HTML DOM元素有八种方法: 1.根据id获取标签元素: document.getElementById("id名"); 2.根据标签名获取标签列表: document ...

  5. linux压缩及归档

    一.解析 压缩:把大文件,通过压缩成一个比之前小的文件. 归档(打包):把多个文件,归档成一个文件. 二.压缩 1.zip(归档压缩,可以压缩目录,要保存源文件) 压缩:zip  压缩后的文件名 压缩 ...

  6. Q - 迷宫问题 POJ - 3984(BFS / DFS + 记录路径)

    Q - 迷宫问题 POJ - 3984 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, ...

  7. 1007 Maximum Subsequence Sum (25 分)

    1007 Maximum Subsequence Sum (25 分)   Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​​ }. A ...

  8. STM32CubeMX工程定时器配置

    STM32CubeMX生成工程 选择自己的芯片型号 配置RCC寄存器时钟为外部晶振 单击芯片配置GPIO,选择输出方式,重命名标签等 进入时钟配置,本人使用的为8M外部晶振作为时钟源,PLL时钟源选择 ...

  9. 【BIM】BIMFACE中创建疏散效果

    背景 在BIM运维中,消防疏散是不可或缺的一环,当发生火警的时候,触发烟感器发生报警,同时启动消防疏散,指导现场工作人员进行疏散,及时准确地显示出疏散路线对争取疏散时间尤为重要.我将介绍如何在bimf ...

  10. javaweb添加学生信息

    连接数据库已经进行判断 要求: 1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分) 2登录密码:要求显示“• ”或“*”表示输入位数,密码要求八位以上字母.数字组成.(1分 ...