WCF学习笔记 -- 如何用C#开发一个WebService
假设所有工程的命名空间是demo。
- 新建一个C#的ClassLibrary(类库)工程。
- 在工程引用中加入System.ServiceModel引用。
- 定义接口,你可以删除自动生成的代码,或者直接修改代码来添加接口。
[ServiceContract]
Interface IMath {
[Operationcontract]
Int add (int a, int b);
}
- 实现接口
添加一个新类,如Math实现该接口。
Public class Math : IMath{
Int add(int a,int b){
Return (a+b);
}
}
- 编写寄宿应用程序,新建一个控制台或者Winform程序。添加对System.ServiceModel和System.ServiceModel.Channels的引用。
- 通过代码绑定。
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();
}
}
}
}
- 通过配置文件绑定。如果是控制台程序,请添加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的更多相关文章
- VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式
原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...
- WCF学习笔记之事务编程
WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...
- WCF学习笔记之传输安全
WCF学习笔记之传输安全 最近学习[WCF全面解析]下册的知识,针对传输安全的内容做一个简单的记录,这边只是简单的记录一些要点:本文的内容均来自[WCF全面解析]下册: WCF的传输安全主要涉及认证. ...
- WCF 学习笔记之异常处理
WCF 学习笔记之异常处理 1:WCF异常在配置文件 <configuration> <system.serviceModel> <behaviors> <s ...
- WCF 学习笔记之双工实现
WCF 学习笔记之双工实现 其中 Client 和Service为控制台程序 Service.Interface为类库 首先了解契约Interface两个接口 using System.Service ...
- Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建
Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...
- Android:日常学习笔记(8)———探究UI开发(5)
Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...
- Android:日常学习笔记(7)———探究UI开发(4)
Android:日常学习笔记(7)———探究UI开发(4) UI概述 View 和 ViewGrou Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成 ...
- Android:日常学习笔记(8)———探究UI开发(3)
Android:日常学习笔记(8)———探究UI开发(3) 详解四种基本布局 前言 布局定义用户界面的视觉结构,如Activity或应用小部件的 UI.您可以通过两种方式声明布局: 在 XML 中声明 ...
随机推荐
- SQL性能优化工具TKPROF
全名为Trace Kernel Profile,用来格式化跟踪文件,是一个命令行工具. 主要的格式例如以下: tkprof tracefile outputfile - tracefile:要分 ...
- Ubuntu 15.04下MySQL 5.6.25不支持中文解决办法
Ubuntu 15.04下MySQL 5.6.25不支持中文解决办法,apt-get install 安装的,不是源码包安装的mysql. 1 修改mysql的配置文件 /etc/mysql/conf ...
- Codeforces Round #Pi (Div. 2) D. One-Dimensional Battle Ships set区间分解
D. One-Dimensional Battle ShipsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/co ...
- 【Android】利用服务Service创建标题栏通知
创建标题栏通知的核心代码 public void CreateInform() { //定义一个PendingIntent,当用户点击通知时,跳转到某个Activity(也可以发送广播等) Inten ...
- C 高级编程3 静态库与动态库
http://blog.csdn.net/Lux_Veritas/article/details/11934083http://www.cnblogs.com/catch/p/3857964.html ...
- Sales_item例子
Sales_item.h #ifndef SALES_ITEM_H #define SALES_ITEM_H #include<iostream> #include<string&g ...
- 日志分析(五) PV&UV
应用设计请求之初,对于url有一定的规划.因此,请求的url格式类似如下: /**/school/****?token=a66cb2a3-e0b7-4f0a-b332-********* token唯 ...
- POJ 2498 Martian Mining
Martian Mining Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2194 Accepted: 1326 De ...
- mysql查询更新时的锁表机制分析
为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制. 一.概述 MySQL有三种锁的级别:页级.表级.行级.MyISAM和MEMORY存储引擎采用的是表级锁(t ...
- 在 CentOS 中编译安装 VIM 7.3
转载:http://blog.csdn.net/zhanglyung/article/details/6204574 默认安装的 Vim 不带有多字符支持,所以不支持中文.无论是将 CentOS 本来 ...