WCF-基本知识

(1)WCF服务元数据交换方式介绍:

WCF服务有两种方案可以发布自己的元数据。一种是基于HTTP-GET协议提供元数据;另一种则为MEX终结点元数据交换方式,和WCF服务一样使用一个专门
的终结点,称为MEX元数据交换终结点。
System.ServiceModel.Description命名空间里MetadataExchangeClientMode枚举类型里进行了定义。代码如下:

using System;
namespace System.ServiceModel.Description
{
// Summary:
// Specifies the exchange mode used to obtain metadata.
public enum MetadataExchangeClientMode
{
// Summary:
// A WS-Transfer Get request is used.
MetadataExchange = ,
//
// Summary:
// An HTTP GET request is used.
HttpGet = ,
}
}

元数据交换终结点与其它终结点相似,包含自己的地址(Address)、绑定(通信协议Binding)、契约(服务、操作、数据Contract),但是使用的服务契约为
WCF提供的接口IMetadataExchange。两种发布元数据的方式使用了两种不同的标准网络传输协议,前者为HTTP/GET请求,后者为WS-MetadataExchange(MEX:
WCF支持的基本绑定HTTP、HTTPS、TCP、IPC等绑定协议)。
      启用元数据交换服务后,必须显式配置元数据交换行为。下面我们来分别详细介绍WCF服务元数据交换配置和编程两种方式的实现过程。

(2)WCF服务元数据交换配置实现过程详解:

【2.1】配置HTTP-GET元数据交换方式:
需要配置服务的行为和基地址,客户端可以根据基地址查看服务的元数据。代码如下:

<service name="WcfServiceApp.WCFService" behaviorConfiguration="WcfServiceApp.WCFServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8001/"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WcfServiceApp.WCFServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadat
a endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Se
t to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>

3 WCF服务元数据交换编程实现过程详解:

【3.1】WCF服务元数据交换HTTP-GET编程实现:
必须添加对命名空间的引用, using System.ServiceModel.Description;我们对服务元数据操作的类和接口信息定义在此命名空间里,具体的实现HTTP-GET的
代码如下:

ServiceMetadataBehavior metadataBehavior;//定义服务行为变量,
metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
//获取宿主的行为列表
if (metadataBehavior == null)//如果没有服务原数据交换的行为,实例化添加服务原数据交换行为
{
metadataBehavior = new ServiceMetadataBehavior();
Uri httpAddress = new Uri("http://localhost:8001/");
metadataBehavior.HttpGetUrl =httpAddress;
metadataBehavior.HttpGetEnabled = true;//设置HTTP方式
host.Description.Behaviors.Add(metadataBehavior);
}

首先是获得服务行为的列表信息,如果没有设置,我们就进行实例化服务原数据交换行为,并设置http方式可
用。host.Description.Behaviors.Add(metadataBehavior);添加宿主服务的行为。

在浏览器中查看如下图:后缀为wsdl

【3.2】WCF服务元数据交换WS-*编程实现:
这里分别实现了HTTP、TCP、IPC三种方式的的元数据交换的代码。和http-get方式略有不同,我们需要实例化自己绑定元素和绑定,最后作为参数传递给host
宿主实例。具体实现代码如下:
//2编程方式实现ws*原数据交换

//生命三个绑定节点类
BindingElement tcpBindingElement = new TcpTransportBindingElement();
BindingElement httpBindingElement = new HttpsTransportBindingElement();
BindingElement pipeBindingElement = new NamedPipeTransportBindingElement();
//实例化通用绑定类的实例
Binding tcpBinding = new CustomBinding(tcpBindingElement);
Binding httpBinding = new CustomBinding(httpBindingElement);
Binding pipeBinding = new CustomBinding(pipeBindingElement);
//
Uri tcpBaseAddress = new Uri("net.tcp://localhost:9001/");
Uri httpBaseAddress = new Uri("http://localhost:9002/");
Uri pipeBaseAddress = new Uri("net.pipe://localhost/");
host.AddServiceEndpoint(typeof(WCFService.IWCFService), new NetTcpBinding(), tcpBaseAddress);
host.AddServiceEndpoint(typeof(WCFService.IWCFService), new WSHttpBinding(), httpBaseAddress);
host.AddServiceEndpoint(typeof(WCFService.IWCFService), new NetNamedPipeBinding(), pipeBaseAdd
ress);
//ServiceMetadataBehavior metadataBehavior;//定义服务行为变量,
metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
//获取宿主的行为列表
if (metadataBehavior == null)//如果没有服务原数据交换的行为,实例化添加服务原数据交换行为
{
metadataBehavior = new ServiceMetadataBehavior();
host.Description.Behaviors.Add(metadataBehavior);
}
//如果没有可用的mex节点,可以使用一下代码判断,添加mex节点
host.AddServiceEndpoint(typeof(IMetadataExchange), tcpBinding, "mex");
host.AddServiceEndpoint(typeof(IMetadataExchange), httpBinding, "mex");
host.AddServiceEndpoint(typeof(IMetadataExchange), pipeBinding, "mex");

在浏览器中查看如下图:后缀变为mex.

WCF-基本知识的更多相关文章

  1. WCF入门教程:WCF基础知识问与答(转)

    学习WCF已有近两年的时间,其间又翻译了Juval的大作<Programming WCF Services>,我仍然觉得WCF还有更多的内容值得探索与挖掘.学得越多,反而越发觉得自己所知太 ...

  2. WCF基础知识

    根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架.它使得开发者能够建立一个跨平台的安全.可信赖.事务性 ...

  3. WCF基本知识

    1.开通WCF调试服务: 须在服务端的行为中作如下配置:includeExceptionDetailInFaults="true" 代码如下: <behaviors> ...

  4. WCF基础教程之开篇:创建、测试和调用WCF

    一转眼,又半个月没有更新博客了.说实话,最近确实是有点忙.不过即使再忙忙,也要抽空来学习一些东西.最近用WCF比较多,就来跟大家分享一下关于WCF的知识吧!为了让大家都能看懂,照顾一些没有学过WCF的 ...

  5. [老老实实学WCF] 第三篇 在IIS中寄存服务

    老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我 ...

  6. 学习之路十四:客户端调用WCF服务的几种方法小议

    最近项目中接触了一点WCF的知识,也就是怎么调用WCF服务,上网查了一些资料,很快就搞出来,可是不符合头的要求,主要有以下几个方面: ①WCF的地址会变动,地址虽变,但是里面的逻辑不变! ②不要引用W ...

  7. (转) [老老实实学WCF] 第三篇 在IIS中寄存服务

    第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我们对WCF的编程生 ...

  8. WCF小实例以及三种宿主

    WCF小实例以及三种宿主 最近一直在学习WCF相关知识,下面将通过一个小实例对所学的知识进行简单的回顾:本实例是一个简单三层操作数据库,并且也简单实现的三种宿主(控制台宿主,IIS宿主以及Window ...

  9. WCF分布式服务1-核心概念

    参考msdn library for WCF Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架. 借助 WCF,可以将数据作为异步消息从 ...

  10. 老老实实学WCF

    老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我 ...

随机推荐

  1. 天底下最简单的QT画图板,就一个类,60行代码

    简单直观.但是我有个问题是,这实际上不是在绘制直线,而是几千几万个超级短的“直线”,这样会不会效率很低呢? 注意,每次绘制的时候,需要一支笔,这支笔需要设置颜色和宽度(就像我们平时写字也要稍微挑一下笔 ...

  2. Android Activity整体管理和关闭工具类封装

    如何彻底退出程序,在任意位置退出程序,如何管理当前的运行栈,知道activity的堆栈结构等,本文封装了一个Activity管理类,可以方便随时退出程序. /** * 应用程序Activity管理类: ...

  3. git “bad index file sha1 signature fatal: index file corrupt”错误

    在执行commit或revert等操作时,提示“bad index file sha1 signature fatal: index file corrupt”错误,导致操作失败.这是由于git的in ...

  4. UML建模之时序图

    现在是二月,而且到如今你或许已经读到.或听到人们谈论UML 2.0 —— 包括若干进步的 UML 的新规范,所做的变化.考虑到新规范的重要性,我们也正在修改这个文章系列的基础,把我们的注意力从 OMG ...

  5. How to Read an Engineering Research Paper

    How to Read an Engineering Research Paper William G. Griswold Department of Computer Science & E ...

  6. linux mount命令学习

    我们在下面这篇博文中已经有笼统的学习了文件系统的一些相关知识, http://blog.csdn.net/boyxulin1986/article/details/12107113 本篇我们主要是用来 ...

  7. socket实现局域网通信

    今天实现了一个局域网通信的小例子,上来记录一下,代码不成熟,勿拍. 这是我本机客户端: 这是我虚拟机的客户端. 我为他们分配了静态IP,这样就可以实现局域网通信了.注意代码中必须把监视线程的IsBac ...

  8. POJ 2513 Colored Sticks - from lanshui_Yang

    题目大意:给定一捆木棒,每根木棒的每个端点涂有某种颜色.问:是否能将这些棒子首位项链,排成一条直线,且相邻两根棍子的连接处的颜色一样. 解题思路:此题是一道典型的判断欧拉回路或欧拉通路的问题,以木棍的 ...

  9. 魅蓝Note有几种颜色 魅蓝Note哪个颜色好看

    http://www.pc841.com/shoujizhishi/39882.html http://news.mydrivers.com/1/359/359443.htm 魅族发布首款千元高性价比 ...

  10. 单源最短路径(dijkstra算法)php实现

    做一个医学项目,当中在病例评分时会用到单源最短路径的算法.单源最短路径的dijkstra算法的思路例如以下: 如果存在一条从i到j的最短路径(Vi.....Vk,Vj),Vk是Vj前面的一顶点.那么( ...