前言

本还想写一集WCF入门教程的,心情实在不好,明天又还有面试,改天再写吧。

说一下今天遇到的入职坑。面试能坑,上班能坑,完全没想到入职也能坑。切身经历。

今年10月份想换工作,更新了一下简历,接到北京汉克时代面试邀请,去了。后来通过了。然后谈了薪资,各方面还算稳妥。同时短信方式向对方确认了本人入职要1个月时间,是否可以。对方回答可以。于是向原公司提出离职申请。在上周5办完所有手续。期间,11月6号接到电话说会发表格给我,让我填写个人信息,后在11月13号回复了邮件,确认了各种信息。

今早去公司入职,公交还不顺,等了好久才到公司,约好时间是9点,到公司已是9点15。和hr通了电话,告知已在门口,后等了半个小时不见有人出来接待我进去。继续打电话告知说稍等有人出来。一段时间后,接到hr电话,该职位已被另一家公司给了别人。我就只能呵呵了。因为已经离职,原公司的年终奖也没有。个人损失不祥。

后hr又打电话,说推荐其他公司,暂时没有拒绝,不过,真心不舒服。。。我是不是太好说话了。

其他不想多说什么,反正这个坑,以后各位同学们长点心眼。记住这个以及这类公司。

第22集 在代码中动态配置endpoint Configure endpoint dynamically in code

通过前面的学习,有个感触,WCF的配置还是很重要的。不过,基本上能在配置文件中的实现的东西,从纯粹实现功能的角度,代码中也能配置。比如是否使用可靠的链接(reliableSession),是否包含包含异常信息(includeExceptionDetailInFaults)。但是实际项目中推荐使用配置文件的方式,因为这样不需要对代码重新编译,直接改,直接用。

但是这集要讲的是如何代码中动态配置endpoint,实际应用场景暂时不明,不过可以提供一个WCF中实现某些功能的思路。外加看完之后觉得和以前的IErrorHandler接口实现中有异曲同工之妙。还有一点要说明的是WCF中的binding扩展性还不错,学习完这集应该能有一点收获。

开始正题。

首先是endpoint的三要素,Address, Binding, Contract。因为我们要实现动态配置,所以,可以在config里面移除这些配置。

这是原先的endpoint配置。

        <endpoint address="" binding="netTcpBinding" contract="HelloService.IHelloService"></endpoint>

以及为了可以让客户端自动生成代理类,我们配置如下serviceBehavior,httpGetEnable为true。

      <serviceBehaviors>
<behavior name="myBehaviorsConfiguration">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>

现在,我们可以把这些删除。(因为includeExceptionDetailInFault可以在特性里面配置,所以也可以删除。)

然后,代码看起来就是这个样子了:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<!--<serviceBehaviors>
<behavior name="myBehaviorsConfiguration">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>-->
</behaviors>
<bindings>
<basicHttpBinding >
</basicHttpBinding>
<netTcpBinding>
<binding></binding>
</netTcpBinding>
</bindings>
<services>
<service name="HelloService.HelloService" behaviorConfiguration ="">
<!--<endpoint address="" binding="basicHttpBinding" contract="HelloService.IHelloService"></endpoint>-->
<!--<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />-->
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/" />
<!--<add baseAddress ="net.tcp://localhost:8734"/>-->
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>

注释了两个endpoint和一个serviceBehaviors,同时移除behaviorConfiguration对上面设置的引用。baseAddress其实也可以移除,代码中也可以配置,不过暂时先放着吧。

然后,如果我们再在客户端重新添加该服务引用,会得到如下错误。

由图可知该service已无法使用。

第2步:在open host之前,我们需要手动添加个endpoint给这个host。

原先代码如下:

        static void Main(string[] args)
{
using(var host = new ServiceHost(typeof(HelloService.HelloService))) {
host.Open();
Console.WriteLine("Service Started @ " + DateTime.Now.ToString ("yyyy-MM-dd HH:mm:ss"));
Console.ReadLine();
}
}

改动后:

        static void Main(string[] args)
{
using(var host = new ServiceHost(typeof(HelloService.HelloService))) {
var serviceBehavior = new ServiceMetadataBehavior()
{
HttpGetEnabled=true
};
host.Description.Behaviors.Add(serviceBehavior);
host.AddServiceEndpoint(typeof(HelloService.IHelloService), new BasicHttpBinding(), "");
host.Open();
Console.WriteLine("Service Started @ " + DateTime.Now.ToString ("yyyy-MM-dd HH:mm:ss"));
Console.ReadLine();
}
}

稍微解释一下,

1. 实例化一个serviceBehavior,这个属于System.ServiceModel.Description命名空间。

2. 把这个serviceBehavior添加到host的description的behaviors集合中。

3. 给host 添加一个endpoint,三个参数分别描述了Contract,Binding类型,Address。

然后再启动这个服务。

测试一下客户端的调用。

重新添加Reference:

测试调用:

works fine。

这集讲了动态配置endpoint,虽然暂时还没有什么实际项目经历,不过可以让我们加深一些对WCF Endpoint的理解。

Thank you!

WCF入门(22)的更多相关文章

  1. WCF入门教程(图文)VS2012

    WCF入门教程(图文)VS2012 上一遍到现在已经有一段时间了,先向关注本文的各位“挨踢”同仁们道歉了.小生自认为一个ITer如果想要做的更好,就需要将自己的所学.所用积极分享出来,接收大家的指导和 ...

  2. WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]

    WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...

  3. 【转】WCF入门教程六[一个简单的Demo]

    一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...

  4. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  5. 学习WCF入门的第一个实例

    一.概述 WCF说白了就是一个基于终结点的通信手段!就是Service端提供一定的功能实现,然后暴露出一个或多个终结点,Client端调用Service端的功能(可以理解为调用一个函数),那么Clie ...

  6. WCF入门教程(五)配置文件

    WCF入门教程(五)配置文件 服务协定以及实现写好后,需要将相关服务公布出去,就需要HOST来承载,供客户端来调用. 承载服务有两种方式,一种通过配置文件,一种通过代码进行配置.上一章已经介绍了代码方 ...

  7. WCF入门教程(四)通过Host代码方式来承载服务

    WCF入门教程(四)通过Host代码方式来承载服务 之前已经讲过WCF对外发布服务的具体方式. WCF入门教程(一)简介 Host承载,可以是web,也可以是控制台程序等等.比WebService有更 ...

  8. WCF入门教程(三)定义服务协定--属性标签

    WCF入门教程(三)定义服务协定--属性标签 属性标签,成为定义协议的主要方式.先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则. 服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的 ...

  9. WCF入门教程(二)如何创建WCF服务

    WCF入门教程(二)从零做起-创建WCF服务 通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) ...

随机推荐

  1. Shell basic1

    A shell script is a text file that typically begins with a shebang, as follows: #!/bin/bash /bin/bas ...

  2. java并发编程实践笔记

    文章转自:http://kenwublog.com/java-concurrency-in-practise-note 1, 保证线程安全的三种方法 :a, 不要跨线程访问共享变量b, 使共享变量是 ...

  3. css中元素居中总结

    很多时候,我们需要让元素居中显示:1. 一段文本的水平居中,2. 一张图片的水平居中,3. 一个块级元素的水平居中:4. 单行文本的竖直居中,5. 不确定高度的一段文本竖直居中,6. 确定高度的块级元 ...

  4. common-pool2对象池(连接池)的介绍及使用

    我们在服务器开发的过程中,往往会有一些对象,它的创建和初始化需要的时间比较长,比如数据库连接,网络IO,大数据对象等.在大量使用这些对象时,如果不采用一些技术优化,就会造成一些不可忽略的性能影响.一种 ...

  5. Linux 系统常用命令汇总(七) 安全设置

     安全设置 分类 命令 选项 注解 安全策略 selinux setenforce number(0,1) 设置selinux状态,0关闭,1开启 getenforce 显示当前selinux状态,e ...

  6. 深度优先搜索 codevs 1064 虫食算

    codevs 1064 虫食算 2004年NOIP全国联赛提高组  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 所 ...

  7. Adobe Scout 使用参考说明

    Adobe Scout 用于优化 Flash 内容,是一款极为强大的工具,因为它能让您看到 Flash Player 幕后正在发生的事情.但是若明白 Flash Player 为什么做这些事情,您看到 ...

  8. Linux下安装使用NMON监控、分析系统性能

    背景:今天在LoadRunner11.0中使用rstat监控linux过程中,始终提示如下错: Monitor name :UNIX Resources. Cannot initialize the ...

  9. iOS app上传错误集锦(转载)

    1.工程里增加了版本自动更新. 2.未增加判断网络状态的类Reachability. 3.问题:error itms -90049 This bundel is invalid. The bundle ...

  10. 19Mybatis_订单商品数据模型分析

    这篇文章是对订单商品数据模型进行分析(会给出分析思路),有四张表.这篇文章是后续文章的基础,因为后续的文章要针对这个数据模型(四张表)进行一对一,一对多,多对多进行查询. 我们以后会碰到各种各样的数据 ...