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 中声明 ...
随机推荐
- web app页面要求
代码: <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum- ...
- iOS开发——面试总结(一)
面试总结(一) 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题: 1.搞清楚touch事件的传递(事件的响应链) 事件的响应(responder chain) 只有继承了UIRespon ...
- cocos2dx 3.1从零学习(一)——入门篇(一天学会打飞机)
没办法,浏览这么高,为啥没人投票呢?朋友们,我这篇文章參加了csdn博文大赛.喜欢的来点个赞吧!点击:http://vote.blog.csdn.net/Article/Details?article ...
- 《Linux内核设计与实现》读书笔记
http://www.cnblogs.com/wang_yb/tag/linux-kernel/
- c语言字符串实例
例子:涉及字符串.字符.指针.++等 例一:字符串与字符 #include <stdio.h> void reverse(char *str) { char *end=str; print ...
- 关于设置android:imeOptions属性无效的解决办法
在对Android的EditText控件进行设置时,经常会限定一下输入法的属性,设置右下角为完成或者搜索等,一般都会想到android:imeOptions属性,但是仅仅这么设置通常是无效的,还要搭配 ...
- org.apache.hadoop.filecache-*
我不知道为什么这个包为什么是空的,从名字上看应该是一些管理文件缓存的类吗? 网上也没查到什么,各种群里也没大牛回答. 期望某位大牛能告诉我答案,谢谢
- 编译APK时出现 This attribute must be localized 的两种解决方法 免修改xml
下面两种方法可以让你不需要修改APP XML字符串的条件下忽略 This attribute must be localized 的 Android 源码编译时的错误警告. 1.修改当前APP的 An ...
- Linux基本命令之逻辑测试二
1.首先介绍一个与test一样的测试方式[ expression ](千万注意expression的前后都有空格,没有空格的话会报错) 这个测试方式经常作为if的条件. /home/www这个文件名存 ...
- [设计模式]<<设计模式之禅>>关于里氏替换原则
在面向对象的语言中,继承是必不可少的.非常优秀的语言机制,它有如下优点:● 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性:● 提高代码的重用性:● 子类可以形似父类,但又异于父类,“龙 ...