入职一周

一、WCF服务应用程序与WCF服务库

     
很想拿到的是自我又几遍跳槽了,而且是在一年内经历了三家商厦。相对其他同事朋友而言,频繁更换工作环境使得我的经历其实更是助长,见识到了诸多的序列,不管是烂项目也好,优秀的品类也罢,都使自己见闻大开,积累过多经验和教训;同时也见识到了三家不同商家的音信化建设品位,不管是信息化沙漠也好,稳健庞大的音信化架构也好,也都是自己从事经历的三次“体验”,尽管经过不少不利,也见识到了有的奇葩的人,但最少我明天是万幸的。

  俺们在平时付出的经过中常用的项目序列有“WCF
服务应用程序”和“WCF服务库”。

     
因为经历过一次奇葩的店家和奇葩的田间管理,所以现在跳槽我特意关心公司文化以及所在部门的架构、人士集体以及人事制度。跳槽从前还有点担心,毕竟近年来压力缠身,有房贷压着,也不敢太嚣张。

  WCF服务应用程序,是一个方可实施的顺序,它有单独的长河,WCF服务类契约的概念,可以平昔看出运行的效能。此项目模板基于IIS托管的次序,如本体系的率先节所示。在开发基于IIS托管的WCF服务程序时,相比较多见,自学的时候也可以行使这体系型,简单易懂。

      J集团实际上早在一年前人事就有挂钩过自己,这时候是想让我去总部做SAP
SD模块的高级老董,只是心痛的是远离大城市,我就一贯不承诺。

  WCF服务库,可以认为是一个分包WCF服务以及契约定义的类库。不可能直接运行,你可以在任何连串里引用,在宿主里启用托管那些库,有点类似于我们在Web项目中选择的类库。考虑WCF服务计划的时候,服务类的定义为独立的库,可以为另外项目利用。提升代码的复用性。

     
J公司人事第二次互换我曾经是自己在特古西加尔巴入职H集团半年将来。恰好J公司这边新上任CIO,大刀阔斧做了成千上万改造和人士精简策略,需要招一些高档项目牵头,因而又三回找到自己。尽管那一遍岗位工作在卢萨卡,但总归在H集团里环境还不错,同事也互相比较协调,领导也正如靠谱,所以我也就没再继续下去。

  当然你也足以修改那个代码,比如把WCF服务程序里的类,移到一个独门的类库里,或是把类库里的类移到WCF服务程序中。

     
当J公司人事再两次互换自己的时候曾经是看似年终了,这多少个时候我心态也不无扭转,尽管被提醒为SAP项目标管理者,但仍然认为眼前工作岗位已经远远不可以满足自家的挑衅欲望,所做的行事也都是市值度不高的事体,当然最重点的是经受不住作为主持的我工钱待遇远不如我的下级(可以精晓为铺面薪资制度不制造和决策者不精晓SAP行情)。后来也跟领导提了加薪的事体,但最终给我的加薪幅度仍然远没有达到自己的渴求。因而J公司人事关系自己也就是水到渠成的觉得了。

二、概述

     
于是乎礼拜一起始电话互换,周五当面面试,周三人事做背调,礼拜日我认可意向,周二就谈薪完成定Offer了。

  通过后面的介绍大家精晓,WCF在运作时必寄宿在“宿主程序”之上,WCF本身不能单独运行(每个WCF服务必须宿主在一个Windows进程中)。.net
提供了多种宿主供WCF运行,WCF仍然非凡灵活的。

     
给领导提离职,如故让他吃惊,尽管竭尽全力挽留,给各个诱惑和提薪,但我去意已决。现在提离职就早已不是为了加薪了。交接工作总体持续了一个月,直到我离职的时候接我岗位的人还没入职,领导没办法只可以交接给一个SAP开发人士。基本上把我会的,所负责的,各样问题点都曾经接入的很明亮,该说的和不该说的,又是录屏又是整文档,甚至手把手教,但她俩如故很难入门。

图片 1

      不得不感慨一句:纯支出而不懂业务的人常有未曾竞争力!

  WCF的宿主可以是 Windows 服务、COM+应用程序、WAS(Windows Activation
Services,Windows进程激活服务)或IIS、Windows应用程序,或简捷的控制台应用程序及任何.net程序。

     
然则,不管怎么说,仍然很感谢H公司,我会很怀恋在H集团的光阴。SO,再见了,赏心悦目的五缘湾;再见了,坑货的ICC;再见了,和睦的同事;再见了,HXPP;

  这节的言传身教大家重新树立WCF类库项目为例做示范,名称为:WCFLibrary,并剔除自动生成的几个文本(IService1.cs、瑟维斯(Service)(Service)1.cs)。如下图所示:

      第一天:

图片 2

     
这是自个儿先是次遇上入职时间是在早晨2点的店铺。准时到国金大厦B栋,前台登记之后就到人事所在的大楼。办公条件相比较精简空旷,也终于自己雅观中高等办公环境的指南。可是我还要在软件园办公半个月才会搬来那里。跟人事简单表明来意,人事MM让自家先坐着等说话。我顺便看看手机帮H公司处理一下办事的事体。差不多半个刻钟后,人事MM才先导拍卖我的入职。原以为我索要写N次姓名和身份证号,没悟出才写了5次而已,整个经过非凡简单清爽,连基本的人事制度培训都尚未。后来才了解各样月集团都会有新员工入职培训,地方在石家庄总部,先天只是简单做人事系统的数目录入。

  鼠标右键查看项目性质。我们发现,其实“WCF类库项目”与大家常常建立的“类库项目”都是类库,只不过多了WCF的类库项目在新建时多了六个dll的引用(System.Service(Service)Model.dll、System.Runtime.Serialization.dll)和一个自动生成的布局文件(该配置文件只用于调试时拔取,在WCF寄宿将来会采纳宿主的布置文件与其他应用程序通信)。这更注明了我们在做分式程序支付的时候与我们从来付出的应用程序没有多大的界别,只要我们在应用程序间通信时“符合WCF的约定”即可。

     
完事儿之后就去软件园二期的办公地,骑单车也就10分钟不到,万分近。到48号楼8层,先让前边的Leedarson同事——爷帮我带到所在的机关。恰好领导和共事们都在,我们简单围在协同互动介绍一下,这即便是自己到新条件的“开门红”了。办公桌和总计机早已准备好了,空间相比狭窄,自然没有在H集团那一个宽广明亮,但想到在这里只需要10天工作日,也就罢了。电脑配置也不会太差,硬盘居然是三星512G
SSD,即便内存只有4G,但全体而言不会太低端。

  服务端我们还和率先个学科一样(IUser接口与User实现),只建立一个办法做为我们调用的言传身教代码如下:

     
领导安排坐我左边的一个少女指点我快捷进入工作意况,除了部分主旨的文档,我也咨询了无数关于项目标架构、流程、业务等问题,即便他并不是漫天都晓得,涉及到支付以及更详细的他也不清楚,然而阿姨娘才毕业一年,有这么的工作能力和素养其实比我这时强许多了,由衷赞扬之!

//添加引用
using System.ServiceModel;

namespace WCFLibrary
{
    [ServiceContract]
    interface IUser
    {
        [OperationContract]
        string ShowName(string name);
    }
}

namespace WCFLibrary
{
    class User : IUser
    {
        public string ShowName(string name)
        {
            string wcfName = string.Format("WCF服务,显示姓名:{0}", name);
            return wcfName;
        }
    }
}

     
18:00如期下班,才发现软件园东二门那一个多的人搭公交车,回住处的公交车基本上挤不上来。我就索性骑自行车回去,骑到半路我就后悔了,很远也很冷,而且许多路并没有举行自行车道,基本上在跟汽车抢路,极其惊险。差不多折腾了40分钟才到家里,看来未来得坐车便宜。

由于原先的契约为IService(Service),现在的为IUser,所以安排文件有两处要修改为:

      第二天:

<service name=”WCFLibrary.User”>

     
前几天上班的时候坐的是641,绕来绕去到软件园东二门的时候曾经是快接近八点了,都怪路上绕而且堵车太严重了。好在便捷上楼,赶在8点在此以前刷指纹。这几天基本上没有什么样任务,我除了看文档熟谙项目之外,也初叶最先处理部分非凡。项目得以说已经上线了,在一些门店做试点,近年来处于先前时期运维阶段。一整天下来也就一个题材,项目稳定性没话说,非常很少,用户的问题也很少,而且数量差不多都不错。所以说一个好的品种管理以及执行进程是何等的严重性。悲催的是本人发现SAP系统之中我什么权限都未曾,遭遇问题要查的时候老是指示没权力。从前H公司的时候我是SAP_ALL,想怎么玩就怎么玩,到了此间就水土不服了。好在总部SAP团队我有人,处理事情起来相比顺手。接下来是要从头申请一些该有的权能了。

<endpoint address=”” binding=”wsHttpBinding”
contract=”WCFLibrary.IUser”>

     
中午就在小卖部外面吃饭,软件园果然人员众多,吃饭都要排队很久。我也很快跟左右三个同事打成一片,都是小后生,相比较好相处。新到一个供销社作息习惯一定没有事先那么顺了,至少傍晚休息的折叠床现在还从未搬过来,等集团搬到国金的时候再看看弄过来睡呢。

点击“F5“运行效果如下图所示表明成功:

     
早晨也依旧在拍卖问题点和到国金安装会议电视机,臆度下周会做项目的依样画葫芦吧。

图片 3

      下班走软件园西门,坐105路,也是满车都是人,不提!

二、IIS宿主

      第三天:

  大家在率先节中,把WCF寄宿在IIS之上,在IIS中宿主一个劳务的首要优点是在暴发客户端请求时宿主进程会被电动启动,并且你可以看重IIS来治本宿主进程的生命周期。在开发和采用的进程与Web
Service异常相像。

     
基本上这天也没啥特此外,路上一样人挤人,也是踩着点刷卡。但是明天也听同事们瞎聊闲谈过往集团音信化部门的有些演变历史和故事,每家公司都会有很不错的IT故事,J集团也不例外。我念念不忘觉得上级领导即使不苟言笑,但对工作有异常严峻的渴求,同时做项目也是老大厉害,经手的类别都运行得很好,在音讯部也是众望所归很有威望,是一个不易的首席执行官。

、控制台应用程序宿主

     
意外发现商家这里权限卡控分外的严刻,比如外网权限,QQ和微信等都要OA申请,然后通过音讯副首席执行官级其它人审批,而且他父母审批不是无论审批的,需要有充分的理由。我个人觉得权力管理是大势所趋要的,特别是外网等,但那些应该只是仅对其他非信息化的机构,而信息部是必定要有外网权限的,毕竟设计到技术和业务往往需要通过外网来查阅资料,甚至也不乏跟网友交换沟通。我很难想象没有外网的工作会有多大的阻碍,作为音信副总监,一个CIO不应当不驾驭那个道理。

  建立宿主

      第四天:

  (1)在解决方案下新建控制台出口项目 WCFHost_Console。

      前天也总算对SAP
VC有了老大大的打听,早在前头自己就有询问过,可是在此地我就又更深入一步,也感慨一些地点的安装居然可以成功这样子灵活,再度惊讶一句:SAP真不愧是世界首先的ERP,没有之一。假如换做其他诸如渣渣友,渣渣碟和渣渣捷不亮堂会是怎么结果。这种认识进一步让自家无时或忘觉得以前很多的选型,很多的理由对SAP的攻击和质疑都改为深深的好笑,哪些所谓用户体验,UI不美观的传道在那个面前简直不堪一击。所以说,要做ERP就决然做SAP,否则就别做。经历过SAP系统的人再去接触任何ERP会分分钟令人觉着恶心!

  (2)添加 System.ServiceModel.dll 的引用。

     
部门同事算起来大概10个,总部一个,圣何塞一个,剩下的都在加纳阿克拉。互相又因工作的不等分了一些组,居然还有2个PLM高级应用工程师,刚刚选型截止,本以为会用SAP
PLM的制品,最后选了西门子的TeamCenter,传说中是PLM全世界第一。哈哈,都是天底下第一,整个消息化建设就很好玩了,空间十足!
     

  (3)添加 WCF 服务类库(WCFLibrary)的类别引用。

      第五天:

  (4)创设宿主程序,代码如下:

     
那多少个好不容易我在J公司的首先周最终一天。先天也从来不什么要紧的事宜,就是规定了下一礼拜日去总部测试信用额度接口的事务,领导特别交代要多测试,多着想两种意况,我想,发挥自己的市值的时机来了,这是自己最善于的工作。二姨娘这一周对自身甚是照顾,在广大行事内和外的细节上对本身知无不言言无不尽。同时前几日自我也看出了传说中的CIO,简单开了一下会,我也意外才察觉我们以此项目蓝图尽管出来了,也最近都试点上线了,但蓝图都还没签核完成。CIO只是过了一下蓝图文档,也对签核的事儿特别在意,平素嘱咐要怎么着咋样,其实站在他的角度上看,理应这样。

using System;
using WCFLibrary;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace WCFHost_Console
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建宿主的基地址
            Uri baseAddress = new Uri("http://localhost:8080/User");
            //创建宿主
            using (ServiceHost host = new ServiceHost(typeof(User), baseAddress))
            {
                //向宿主中添加终结点
                host.AddServiceEndpoint(typeof(IUser), new WSHttpBinding(), "");
                //将HttpGetEnabled属性设置为true
                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                smb.HttpGetEnabled = true;
                //将行为添加到Behaviors中
                host.Description.Behaviors.Add(smb);
                //打开宿主
                host.Open();
                Console.WriteLine("WCF中的HTTP监听已启动....");
                Console.ReadLine();
                host.Close();
            }
        }
    }
}

     
在此以前听同事们说单位活动极少,恰好我刚来不到一周就赶上难得的四回命宫动,计划与下一周日到双鬼门关出游。想到十一月份在H公司才去一趟,纯烧烤的运动(正是上次双龙潭之行,为自我背后离开H集团买下伏笔)。本来我是提议去大嶝岛的,不过“寡不敌众”,我们都采纳双鬼门关了,只可以做罢。

(5)运行宿主程序[在客户端调用时要先运行宿主程序],如下图所示:

 

图片 4

     
以上大概就是大概的《入职一周》,全体而言我要么挺顺心的,不得不说这是一家跟立达信公司很相似的集团,消息化完备,领导也丰硕重视。我想,我会竭尽全力从来坚持不渝下去,在此处好好工作,不会自由跳槽了,毕竟有本钱有压力,可以在一家喜欢的公司长长久久做下来就是一种新年了。到了自己那多少个年龄,是时候考虑安稳下来了。 

  表达宿主建立成功。在上例中用到”ServiceHost”类,这里只是简短的采纳,具体请查看“MSDN
ServiceHost”

  创制客户端

  (1)重新确立解决方案–>Web应用程序项目。

  (2)添加对劳动的引用(在引用上右键–>输入大家定义的服务宿主的基地址(此处为:http://localhost:8080/User)–&gt;前往–&gt;确定),具体请看第一节。

图片 5

  (3)测试程序如下图所示表明成功(注意:一定要先运行我们的宿主程序才行,假诺宿主没有打开的话会报错:出于目的电脑积极拒绝,不可以连接。)。

图片 6

  在这个示例中大家把Endpoint中的ABC,基地址,Behaviors等都直接写在了代码里,但实际上利用过程中都是去看重配置文件,为了相比较表达我们下边的例子中会使用安排文件。

**四、Windows应用程序宿主 **

  建立宿主

  (1)在解决方案下新建Windows窗体应用程序项目 WCFHost_Form。

  (2)添加 System.ServiceModel.dll 的引用。

  (3)添加 WCF 服务类库(WCFLibrary)的品种引用。

  (4)添加应用程序配置文件App.config。

  (5)创造宿主程序MainForm窗体,并修改App.config,代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="WCFLibrary.User">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8081/User"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="wsHttpBinding" contract="WCFLibrary.IUser"></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>


using System;
using WCFLibrary;
using System.ServiceModel;
using System.Windows.Forms;
using System.Configuration;

namespace WCFHost_Form
{
    public partial class MainForm : Form
    {
        ServiceHost host;

        public MainForm()
        {
            InitializeComponent();
        }

        //应用程序加载
        private void MainForm_Load(object sender, EventArgs e)
        {
            host = new ServiceHost(typeof(User));
            //打开宿主
            host.Open();
            this.lblState.Text = "WCF中的HTTP监听已启动....";
        }

        //应用程序关闭
        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            host.Close();
        }
    }
}

运行程序如下图所示:

图片 7

  建立客户端

  同上面的Console程序一样,这里要引用的地点为:<add
baseAddress=”http://localhost:8081/User"/&gt;

  在那多少个例子中与Console应用程序不同的是,大家在Console配置是直接写在程序中的,而在本例中大家选拔的是安排文件,区别在于一旦写在部署文件中程序运行时一直到布置文件里取出相关的布局节去创设瑟维斯(Service)(Service)Host类。

五、WAS宿主

  Windows 进程激活服务 (WAS)
概述
.aspx)  

  IIS7允许通过HTTP外的合计举行激活和网络通信。此环境适合开发可透过WCF帮助的任何网络协议(包括http、net.tcp、net.pipe、net.msmq)举行通信的WCF服务。部署简单、管理有利于,那一个网络协议在布局时可像Http一样,直接丢到IIS7上即可,大家在底下的事例中以net.tcp为探讨为例。IIS7以下的版本只好扶助Http的通信。

  1、确保已设置IIS7的激活零部件

  在采用WAS宿主时,必须确保IIS7的激活零部件安装好。打开“控制面板”–>“打开或关闭Windows效能”–>“功用”,我的机器上早已安装过,如下图所示(WCF激活与非WCF激活):

图片 8

  假若没有设置,点击“添加新职能”,然后勾选“WCF激活”,如下图所示:

图片 9

  安装成功后我们打开IIS,点击“默认网站(任一个网站即可)”–>“绑定”–>“添加”,在项目中会现身非IIS扶助的另外品类。如下图所示

图片 10

  表达安装成功。

  2、添加net.tcp的网站绑定

  在上图中,我们采用品种net.tcp,然后在绑定信息中填入“808:*”,点击确定。

  3、开通net.tcp的协议 

  在装置成功还要在指定的网站上绑定了net.tcp将来,我们还要开通.net.tcp协议,点击大家要配备WCF的网站,在IIS管理器的操作功效区有一项“高级设置”点击前边世如下图所示高级配置的窗体

图片 11

  在启用的协商中丰盛net.tcp协议(原来只对http协议协理,现在把tcp协议追加上去),中间用逗号隔离开,如上图所示。

  注意:这一个步骤一个也无法少,否则会油但是生:“找不到独具绑定
NetTcpBinding 的终结点的与方案 net.tcp 匹配的基址。注册的基址方案是
[http]
”的错误音讯。

   4、建立服务程序

  (1)在缓解方案下新建WCF服务应用程序项目 WCFHost_WAS。

  (2)建立IUser与User,代码同例二一样。

  (3)修改配置文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="netTcpBindConfig">
          <security mode="None">
            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
            <message clientCredentialType="Windows" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="MyBehavior" name="WCFHost_WAS.User">
        <endpoint address="" binding="netTcpBinding" contract="WCFHost_WAS.IUser" bindingConfiguration="netTcpBindConfig"></endpoint>
        <!--元数据交换的终结点-->
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyBehavior" >
          <serviceMetadata/>
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="6553600"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

(5)部署服务

  像另外的Web应用程序一样,把有关的公文丢到劳动器端指定目录即可。

  鼠标右键浏览User.svc,如现如下所示:

图片 12

  表达部署成功,如上所示的劳动地方为:net.tcp://服务器名/User.svc/mex

  (6)建立客户端

  建立客户端也与此外的一致,如下图所示:

图片 13

  我们这儿看客户端的布局文件:

<client>
      <endpoint address="http://localhost:8080/User" binding="wsHttpBinding"
        contract="WCFHost_Console.IUser" />
      <endpoint address="http://localhost:8081/User" binding="wsHttpBinding"
        bindingConfiguration="WSHttpBinding_IUser" contract="WCFHost_Form.IUser"
        name="WSHttpBinding_IUser">
        <identity>
          <userPrincipalName value="WIN-EOUTAA4CP4O\Administrator" />
        </identity>
      </endpoint>
      <endpoint address="net.tcp://win-eoutaa4cp4o/User.svc" binding="netTcpBinding"
        bindingConfiguration="NetTcpBinding_IUser" contract="WCFHost_WAS.IUser"
        name="NetTcpBinding_IUser" />
    </client>

大家在一个Web应用程序中调用了二种不同宿主的服务。 

七、总结

  通过上边的多少个例子,咱们贯彻了控制台宿主、Form宿主、WAS宿主(基于TCP协议)的落实。在骨子里的开支过程中,有时候大家还会用到基于Windows服务的宿主,但大多数份都使用IIS做宿主,方便、快速。

 

原文链接:http://www.cnblogs.com/iamlilinfeng/archive/2012/10/01/2706353.html

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注