WCF初探-14:WCF服务协定
前言:
- 在前面的文章中,我们定义的服务协定上都会有一个ServiceContract的特性来修饰,这是因为服务契约的实现要靠ServiceContractAttribute 属性定义,然后使用一个或多个类(或接口)方法中的 OperationContractAttribute 属性定义协定的服务操作。 实现服务协定后并将其与WCF 绑定和 EndpointAddress 对象一起使用时,此服务协定将公开以供客户端使用。
- 公开的信息由 ServiceContractAttribute 表示,其接口与 Web 服务描述语言 (WSDL) <portType> 元素松散相关。 服务协定可用于服务端以指定服务终结点向调用方公开的内容。 它也可以在客户端使用,以指定客户端与终结点通信的协定
WSDL(Web Service Description Language)Web服务器描述语言是用XML文档来描述Web服务的标准,是Web服务的接口定义语言,由Ariba、
Intel、IBM、MS等共同提出,通过WSDL,可描述Web服务的三个基本属性:
服务做些什么——服务所提供的操作(方法)
如何访问服务——和服务交互的数据格式以及必要协议
服务位于何处——协议相关的地址,如URL
在WCF中,WSDL是元数据交换的一种数据格式,通过它的描述,WCF服务程序间就可以进行相应的数据交换,甚至是跨平台的应用间也可以进行数据交换。
服务协定的属性:
当我们在服务契约接口上加上ServiceContract修饰时,可以看到它有两个构造函数,一个是没有参数的。还有一个拥有以下参数:
- Name:获取或设置 Web 服务描述语言 (WSDL) 中的 <portType> 元素的名称。设置此名称后,默认生成的代理类为该名称+Client。
- Namespace:获取或设置 Web 服务描述语言 (WSDL) 中的 <portType> 元素的命名空间。
- ConfigurationName:用于查找应用程序配置文件中的服务元素的名称。 默认值是服务实现类的名称。
- ProtectionLevel:使用 ProtectionLevel 属性指定协定绑定对公开协定的终结点要求的加密和/或数字签名的程度。 在此设置的值是为包括错误在内的所有操作消息提供的默认值。
- SessionMode:获取或设置是否允许、不允许或要求会话。使用 SessionMode 属性来要求在终结点之间支持会话的绑定。 会话就是将在两个或多个终结点之间交换的消息集相互关联的方式。 如果您的服务支持信道会话,则可以使用 InstanceContextMode 属性指定您的服务协定实现实例与信道会话实例之间的关系。 如果绑定不支持会话,则会引发异常。
- CallbackContract:获取或设置当协定为双工协定时的回调协定类型。在 CallbackContract 属性中指定一个接口,该属性表示双向(双工)消息交换中所需的反向协定。 这使得客户端应用程序能够侦听入站操作调用,该调用可以由服务器端服务应用程序独立于客户端活动进行发送。 具有单向操作的回调协定表示从客户端可以处理的服务发出的调用。
WCF服务协定示例:
- 解决方案如下:

- 工程结构说明:
WcfService:WCF服务应用程序。为简单说明,我们将别的代码删除,只留下GetData方法。IService1.cs的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Net.Security; namespace WcfService
{
[ServiceContract(Name="WcfServiceContract",
Namespace="http://wangweimutou.WcfServiceContract",
SessionMode=SessionMode.Allowed,
ProtectionLevel=ProtectionLevel.None,
ConfigurationName="Service1")]
public interface IService1
{
[OperationContract]
string GetData(int value);
}
}
Service1.svc的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text; namespace WcfService
{
public class Service1 : IService1
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}
}
点击Service1.svc在浏览器中,我们可以查看它的WSDL文件,由于本文只注重讲服务协定的属性。所以我们就把WSDL当成普通的XML文件来看,从中可以看到部分设置
的属性已经改变了,至于别的属性应用,可以查看WCF初探-5:WCF消息交换模式之双工通讯(Duplex)和WCF初探-13:WCF客户端为双工服务创建回调对象两篇博文。

WCF初探-14:WCF服务协定的更多相关文章
- WCF 设计和实现服务协定(01)
作者:jiankunking 出处:http://blog.csdn.net/jiankunking WCF 术语: • 消息 – 消息是一个独立的数据单元,它可能由几个部分组成,包含消息正文和消息头 ...
- WCF初探文章列表
WCF初探-1:认识WCF WCF初探-6:WCF服务配置 WCF初探-2:手动实现WCF程序 WCF初探-7:WCF服务配置工具使用 WCF初探-3:WCF消息交换模式之单向模式 WCF初探-8:W ...
- WCF初探-10:WCF客户端调用服务
创建WCF 服务客户端应用程序需要执行下列步骤: 获取服务终结点的服务协定.绑定以及地址信息 使用该信息创建 WCF 客户端 调用操作 关闭该 WCF 客户端对象 WCF客户端调用服务存在以下特点: ...
- WCF初探-13:WCF客户端为双工服务创建回调对象
前言: 在WCF初探-5:WCF消息交换模式之双工通讯(Duplex)博文中,我讲解了双工通信服务的一个应用场景,即订阅和发布模式,这一篇,我将通过一个消息发送的例子讲解一下WCF客户端如何为双工服务 ...
- WCF初探-15:WCF操作协定
前言: 在前面的文章中,我们定义服务协定时,在它的操作方法上都会加上OperationContract特性,此特性属于OperationContractAttribute 类,将OperationCo ...
- WCF初探-20:WCF错误协定
WCF错误协定概述 在所有托管应用程序中,处理错误由 Exception 对象表示. 在基于 SOAP 的应用程序(如 WCF 应用程序)中,服务方法使用 SOAP 错误消息来传递处理错误信息. SO ...
- WCF入门教程(三)定义服务协定--属性标签
WCF入门教程(三)定义服务协定--属性标签 属性标签,成为定义协议的主要方式.先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则. 服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的 ...
- 【WCF全析(一)】--服务协定及消息模式
上周微软开发布会说.NET支持完全跨平台和并开放Core源码的新闻,让我们顿时感到.NET要迎来它的春天.虽然早在几年前.NET就能开发Android和IOS,但是这次的跨平台把Linux都放到了微软 ...
- WCF初探-6:WCF服务配置
WCF服务配置是WCF服务编程的主要部分.WCF作为分布式开发的基础框架,在定义服务以及定义消费服务的客户端时,都使用了配置文件的方法.虽然WCF也提供硬编程的方式,通过在代码中直接设置相关对象的属性 ...
随机推荐
- 让Placeholder在IE中燥起来
网上有好多关于这方面解决兼容性问题的文章,很多招式,学会这一招,让你轻松搞定Placeholder的兼容性,叫我好人,拿走,不谢.... placeholder属性是HTML5 中为input添加的. ...
- 安装django
我已经有Python3.5的环境了.我们去下载Django.https://github.com/django/django.git 直接下载为zip解压即可. 然后在命令提示符下安装 1. 切换 ...
- JQ的基本架构
Jquery的基本架构 引入 以前学习原生JS然后切换到用JQ的时候总觉得很不习惯,甚至有点排斥用JQ.后来自己写项目一直到公司实习用JQ的这段时间,才深深感受到JQ的强大~JQ不仅做到兼容很多 ...
- zjuoj 3605 Find the Marble
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3605 Find the Marble Time Limit: 2 Seco ...
- 【selenium 3】 Mac 下测试环境搭建 Firefox 47+ gecko driver Mac
错误代码如下:File "/usr/local/lib/python2.7/dist-packages/selenium-3.0.0b2-py2.7.egg/selenium/webdriv ...
- ASP标准控件的重要性
1.BackColor 属性:用于显示ListBox控件中的文本和图形的背景颜色,默认为白色(Window) 2.BorderStyle 属性:控制在列表框ListBox周围绘制的边框的类型,其枚举值 ...
- Main.C中 IO口,中断及串口初始化
void Port_Init(void) { //CAUTION:Follow the configuration order for setting the ports. // 1) setting ...
- CSS图片列表
1.效果图: 2.Example Source Code <h3><a href="http://www.52css.com/">我爱CSS画廊</a ...
- Python正则处理多行日志一例
正则表达式基础知识请参阅<正则表达式基础知识>,本文使用正则表达式来匹配多行日志并从中解析出相应的信息. 假设现在有这样的SQL日志: SELECT * FROM open_app WHE ...
- Linux之常用快捷键
tab:自动补齐命令或者路径 ESC+u:将字符小写变大写 ctrl+s:在终端中冻结stdin ctrl+q:在终端中恢复stdin ctrl+a:光标移动到行首 ctrl+e:光标移动到行尾 ct ...