假设所有工程的命名空间是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. PI-利用SoapUI 测试web service的方法介绍

    在运用webservice调用数据的过程中,非常关键的一个步骤就是获取到webservice的地址,并测试webservice的连通情 况,webservice的连通测试主要是两个方面:1,查看web ...

  2. JSON API in Javascript

    1. Serialize JavaScript object  to JSON var messageObject = { title: 'Hello World!', body: 'It\'s gr ...

  3. 读《C# 和 Java 的比较》有感

    网上的一篇<C# 和 Java 的比较>(或者叫<Java 和 C# 的比较>)写的挺不错的,今天忽然搜索到. 自己刚刚接触C#,也不由自主地随时都拿来和Java做对比,所以就 ...

  4. poj 3613 Cow Relays

    Cow Relays Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5411   Accepted: 2153 Descri ...

  5. 以C#编写的Socket服务器的Android手机聊天室Demo

    内容摘要 1.程序架构 2.通信协议 3.服务器源代码 4.客户端源代码 5.运行效果 一.程序架构 在开发一个聊天室程序时,我们可以使用Socket.Remoting.WCF这些具有双向通信的协议或 ...

  6. Android中Activity启动模式详解

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...

  7. Error creating bean with name &#39;menuController&#39;: Injection of autowired dependency……

    出现了一大串错误 Error creating bean with name 'userController': Injection of autowired dependencies failed. ...

  8. RedHat Enterprise Linux下配置yum源(尝试过的可行方案)

    转自:http://bbs.51cto.com/thread-861410-1.html 一.在linux 6.1中本地yum源配置:首先编辑yum源配置文件我们可以再这个目录中新创建一个配置文件,v ...

  9. Python_爬虫1

    Urllib库的基本使用 那么接下来,小伙伴们就一起和我真正迈向我们的爬虫之路吧. 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的 ...

  10. 2012第二届GIS制图大赛——公开课技术问题&答疑(珍贵资源哦!)(http://blog.csdn.net/arcgis_all/article/details/8216984)

    本次制图大赛培训的公开课结束后,我们把所有技术问题收集并进行统一解答,现将这些资料在博文中分享. 由于这些问题涉及了制图技术中较多普遍性的内容,因此是非常珍贵的资源,希望能对大家有帮助. ——符号及符 ...