假设所有工程的命名空间是demo。

    1. 新建一个C#的ClassLibrary(类库)工程。
    2. 在工程引用中加入System.ServiceModel引用。
    3. 定义接口,你可以删除自动生成的代码,或者直接修改代码来添加接口。
[ServiceContract]

Interface IMath {

[Operationcontract]

            Int add (int a, int b);

}
    1. 实现接口

添加一个新类,如Math实现该接口。

Public class Math : IMath{

            Int add(int a,int b){

                        Return (a+b);

}

}
    1. 编写寄宿应用程序,新建一个控制台或者Winform程序。添加对System.ServiceModel和System.ServiceModel.Channels的引用。
      1. 通过代码绑定。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ServiceModel;

using System.ServiceModel.Channels;

namespace HelloServiceHost

{

class Program

{

static void Main(string[] args)

{

using (MyHelloHost host = new MyHelloHost())

{

host.openService();

}

}

}

public class MyHelloHost : IDisposable

{

private ServiceHost serviceHost = null;

/// <summary>

/// base address

/// </summary>

//public const string baseAddress = "net.pipe://localhost";

public const string baseAddress = "http://localhost";

/// <summary>

/// 服务名称

/// </summary>

public const string serviceAddress = "MathService";

/// <summary>

/// 实现服务的契约

/// </summary>

public static readonly Type serviceType=typeof(demo.Math);

/// <summary>

/// 接口契约

/// </summary>

public static readonly Type contractType = typeof(HelloService.IHelloService);

/// <summary>

/// 定义一个服务绑定

/// </summary>

//public static readonly Binding helloBinding = new NetNamedPipeBinding();

public static readonly Binding helloBinding = new BasicHttpBinding();

/// <summary>

/// 构造服务宿主

/// </summary>

private void createHelloServiceHost()

{

///创建服务对象

serviceHost = new ServiceHost(serviceType,new Uri[]{new Uri(baseAddress)});

///添加一个终结点

serviceHost.AddServiceEndpoint(contractType, helloBinding, serviceAddress);

}

public ServiceHost ServiceHost

{

get { return serviceHost; }

}

/// <summary>

/// 打开服务

/// </summary>

public void openService()

{

Console.WriteLine("Service is starting...");

serviceHost.Open();

Console.WriteLine("Service running...");

}

public MyHelloHost()

{

createHelloServiceHost();

}

public void Dispose()

{

if (null != serviceHost)

{

(serviceHost as IDisposable).Dispose();

}

}

}

}

                    1. 通过配置文件绑定。如果是控制台程序,请添加App.config文件,并修改如下,如果是Winform直接修改App.config文件。

1a)  修改App.Config

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<system.serviceModel>

<services>

<service name="demo.Math" behaviorConfiguration="TestBehavior">

<host>

<baseAddresses>

<add baseAddress="http://localhost:8001/MathService"/>

</baseAddresses>

</host>

<endpoint address="" binding="basicHttpBinding" contract="demo.IHello" />

</service>

</services>

<behaviors>

<serviceBehaviors>

<behavior name="TestBehavior">

<serviceMetadata httpGetEnabled="true"/>

</behavior>

</serviceBehaviors>

</behaviors>

</system.serviceModel>

</configuration>

1b)  修改代码如下

class Program

{

static void Main(string[] args)

{

ServiceHost host = new ServiceHost(typeof(demo.Math));

host.Open();

Console.ReadKey();

}

}

WCF学习笔记 -- 如何用C#开发一个WebService的更多相关文章

  1. VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式

    原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...

  2. WCF学习笔记之事务编程

    WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...

  3. WCF学习笔记之传输安全

    WCF学习笔记之传输安全 最近学习[WCF全面解析]下册的知识,针对传输安全的内容做一个简单的记录,这边只是简单的记录一些要点:本文的内容均来自[WCF全面解析]下册: WCF的传输安全主要涉及认证. ...

  4. WCF 学习笔记之异常处理

    WCF 学习笔记之异常处理 1:WCF异常在配置文件 <configuration> <system.serviceModel> <behaviors> <s ...

  5. WCF 学习笔记之双工实现

    WCF 学习笔记之双工实现 其中 Client 和Service为控制台程序 Service.Interface为类库 首先了解契约Interface两个接口 using System.Service ...

  6. Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建

    Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...

  7. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  8. Android:日常学习笔记(7)———探究UI开发(4)

    Android:日常学习笔记(7)———探究UI开发(4) UI概述  View 和 ViewGrou Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成 ...

  9. Android:日常学习笔记(8)———探究UI开发(3)

    Android:日常学习笔记(8)———探究UI开发(3) 详解四种基本布局 前言 布局定义用户界面的视觉结构,如Activity或应用小部件的 UI.您可以通过两种方式声明布局: 在 XML 中声明 ...

随机推荐

  1. cocos2d-x 手电筒效果

    转自:http://blog.csdn.net/xujiezhige/article/details/8448524# 常见的手电筒效果,可以通过CCRenderTexture来实现.主要是通过修改渲 ...

  2. JavaWeb学习篇之----容器Response详解

    今天在来看一下Response容器的相关知识,其实这篇blog早就应该编写了,只是最近有点忙,所以被中断了.下面我们就来看一下Response容器的相关知识吧.Response和我们即将在后面说到的R ...

  3. SCOM2007R2安装和报表服务器配置

    SCOM2007R2默认安装不可以直接支持SQL Server2008R2,需要SQL Server 2008SP1. 如果数据库安装在另一台计算机上,则在安装了SQL Server的计算机上先运行S ...

  4. 【转】larbin中的url去重算法

    1.bloom filter算法 传说中,larbin使用bloom filter算法来进行url去重.那我们就先来了解下bloom filter算法好了. [以下转自:http://hi.baidu ...

  5. Codeforces Round #331 (Div. 2) A. Wilbur and Swimming Pool 水题

    A. Wilbur and Swimming Pool Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/conte ...

  6. iOS开发——数据持久化&本地数据的存储(使用NSCoder将对象保存到.plist文件)

    本地数据的存储(使用NSCoder将对象保存到.plist文件)   下面通过一个例子将联系人数据保存到沙盒的“documents”目录中.(联系人是一个数组集合,内部为自定义对象).   功能如下: ...

  7. Android横竖屏切换处理

    Android横竖屏要解决的问题应该就两个: 1.布局问题:2.重新载入问题   一.布局问题: 如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你 ...

  8. 网络IPC:套接字之套接字描述符

    套接字是通信端点的抽象.与应用程序要使用文件描述符访问文件一样,访问套接字也需要套接字描述符.套接字描述符在UNIX系统是用文件描述符实现的.事实上,许多处理文件描述符的函数(如read和write) ...

  9. u检验、t检验、F检验、X2检验 (转)

    http://blog.renren.com/share/223170925/14708690013 常用显著性检验 1.t检验 适用于计量资料.正态分布.方差具有齐性的两组间小样本比较.包括配对资料 ...

  10. C#_Fileuploadify_notMvc_description

    Uploadify Version 3.2 Options选项设置 auto 选择文件后自动上传 buttonClass 给“浏览按钮”加css的class样式 buttonCursor 鼠标移上去形 ...