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 中声明 ...
随机推荐
- 【转】Installing the libv8 Ruby gem on Centos 5.8
转自:http://appsintheopen.com/posts/18-installing-the-libv8-ruby-gem-on-centos-5-8 First, Centos 5.8 s ...
- HDU 4813 Hard Code 水题
Hard Code Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.act ...
- Codeforces Gym 100342E Problem E. Minima 暴力
Problem E. MinimaTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/attac ...
- C#制作一个消息拦截器(intercept)1
首先,我们先要制作一个自己定义Attribute,让他能够具有上下文读取功能,所以我们这个Attribute类要同一时候继承Attribute和IContextAttribute. 接口IContex ...
- swift3.0 中NSNotification 的使用
swift3.0 有很大变化,其中之一就是NSNotification使用跟原来不一样,以前NSNotification name是String:3.0中定义了一个类型NSNotification.n ...
- MYSQL router 自动均衡负载
配制文件: /etc/mysqlrouter/mysqlrouter.ini [DEFAULT] logging_folder = /var/log/mysql-router plugin_folde ...
- 假设用一个名为text的字符串向量存放文本文件的数据,其中的元素或者是一句话或者是一个用于表示段分隔的空字符串。将text中第一段全改为大写形式
#include<iostream> #include<string> #include<vector> using namespace std; int main ...
- 1081. Rational Sum (20)
the problem is from PAT,which website is http://pat.zju.edu.cn/contests/pat-a-practise/1081 the code ...
- java_io_操作封装
package com.wiker; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import j ...
- c++之函数原型
函数原型: [作用域] [函数连接规范] 返回值类型 [函数调用规范] 函数名 (类型1[形参1]...); 函数定义: [函数连接规范] 返回值类型 [函数调用规范] 函数名 (形参列表) {... ...