WCF 自承载

时间:2022-06-09 01:13:01

WCF 自承载 提供源码

一、WCF 简单介绍
Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,是一套通讯接口。现在比较流行的SOA就可以通过WCF实现。他的功能如果非要用一个词来形容恐怕只能用“强大”,“完美”来形容。融合了remoting和webservices的强大功能,还推出了WCF配置的小工具,更加方便入手和进阶。

WCF 体系结构

WCF 自承载

二、今天想说的
1、Wcf经常需要添加新功能,需要发布新功能与修改配置文件
2、需要配置的信息很有特点(基本就是service,endpoint)
3、配置多了,真的很烦,而且一不小心要是写错了就,糟糕了
进入主题啦,我们要说的是WCF自承载
三、WCF自承载
1、简单实现
1         ServiceHost host = new ServiceHost(typeof(Service1));
2 WSHttpBinding nb = new WSHttpBinding(SecurityMode.None);
3 host.AddServiceEndpoint(iType, nb, "http://127.0.0.1:8888/IService1");
4 host.Open();

这样就可以简单实现自承载了,现实中除了Http我们还经常用到Http

WCF 自承载
 1         //添加支持TCP协议服务
2 private static void AddTcpServer(Type type, Type iType)
3 {
4 ServiceHost host = new ServiceHost(type);
5 NetTcpBinding nb = new NetTcpBinding(SecurityMode.None);
6 host.AddServiceEndpoint(iType, nb, string.Concat("net.tcp://", Ip, ":", TcpPort, "/", iType.Name));
7 OpenServer(host, type.Name + "Tcp服务");
8 }
9 //添加支持HTTP协议服务
10 private static void AddHttpServer(Type type, Type iType)
11 {
12 ServiceHost host = new ServiceHost(type);
13 WSHttpBinding nb = new WSHttpBinding(SecurityMode.None);
14 host.AddServiceEndpoint(iType, nb, string.Concat("http://", Ip, ":", HttpPort, "/", iType.Name));
15 OpenServer(host, type.Name + "Http服务");
16 }
WCF 自承载
2、平常用较常用的有可以通过防火墙的HTTP协议,和效率很高的TCP
WCF 自承载
 1      private static void AddServer(Type type, Type iType)
2 {
3 ServiceHost host = new ServiceHost(type);
4 NetTcpBinding nb = new NetTcpBinding(SecurityMode.None);
5 host.AddServiceEndpoint(iType, nb, string.Concat("net.tcp://", Ip, ":", TcpPort, "/", iType.Name));
6 host.Opening += delegate { Console.WriteLine(DateTime.Now.ToString() + " Http服务启动中" + "\r\n"); };
7 host.Opening += delegate { Console.WriteLine(DateTime.Now.ToString() + " Http服务已经启动" + "\r\n"); };
8
9 host.Open();
10 ServiceHost host1 = new ServiceHost(type);
11 WSHttpBinding nb1 = new WSHttpBinding(SecurityMode.None);
12 host1.AddServiceEndpoint(iType, nb1, string.Concat("http://", Ip, ":", HttpPort, "/", iType.Name));
13 host1.Opening += delegate { Console.WriteLine(DateTime.Now.ToString() + " Http服务启动中" + "\r\n"); };
14 host1.Opening += delegate { Console.WriteLine(DateTime.Now.ToString() + " Http服务已经启动" + "\r\n"); };
15 host1.Open();
16 }
WCF 自承载

这样已经强大了,传入服务和协定的Type,就可以实现服务在Http和Tcp上的承载了。当有一天我们需要msmq,当有一天我们想把服务运行情况的记录到数据库中,当...。通常需求是多变的,程序员要多给自己留点后路

3、后路
WCF 自承载
 1         private static void AddServer(Type type, Type iType, bool useTcpHost, bool useHttpHost)
2 {
3 if (useTcpHost)
4 AddTcpServer(type, iType);
5
6 if (useHttpHost)
7 AddHttpServer(type, iType);
8 }
9 //添加支持TCP协议服务
10 private static void AddTcpServer(Type type, Type iType)
11 {
12 ServiceHost host = new ServiceHost(type);
13 NetTcpBinding nb = new NetTcpBinding(SecurityMode.None);
14 host.AddServiceEndpoint(iType, nb, string.Concat("net.tcp://", Ip, ":", TcpPort, "/", iType.Name));
15 OpenServer(host, type.Name + "Tcp服务");
16 }
17 //添加支持TCP协议服务
18 private static void AddHttpServer(Type type, Type iType)
19 {
20 ServiceHost host = new ServiceHost(type);
21 WSHttpBinding nb = new WSHttpBinding(SecurityMode.None);
22 host.AddServiceEndpoint(iType, nb, string.Concat("http://", Ip, ":", HttpPort, "/", iType.Name));
23 OpenServer(host, type.Name + "Http服务");
24 }
25
26 private static void OpenServer(ServiceHost host, string name)
27 {
28 try
29 {
30 host.Opening += delegate { ShowMessage(name + "启动中"); };
31 host.Opened += delegate { ShowMessage(name + "已经启动"); };
32
33 host.Open();
34 }
35 catch (Exception ex)
36 {
37 ShowMessage(host.ToString() + ex.Message);
38 }
39 }
40
41 private static void ShowMessage(string outMessage)
42 {
43 Console.WriteLine(DateTime.Now.ToString() + " " + outMessage + "\r\n");
44 }
WCF 自承载

第一眼相同的功能代码多多了。是不是很麻烦呢?要是你觉得是,那我承认我太失败了,这样之前说的问题就不用担心了,很简单就解决了。当时新的服务总是有,总是要我改代码,重新发布也麻烦啊。下面说不改代码的办法

4、不改代码的办法
WCF 自承载
 1      static void Main(string[] args)
2 {
3 Setup();
4 Console.ReadLine();
5 }
6
7 private static void Setup()
8 {
9 string docPath = path + "\\Assembly.xml";
10 if (File.Exists(docPath))
11 {
12 XDocument xdoc = XDocument.Load(docPath);
13 foreach (XElement element in xdoc.Root.Element("BLLFiles").Elements())
14 {
15 LoadType(element.Attribute("FileName").Value);
16 }
17 }
18 }
19
20 private static void LoadType(string bllPath)
21 {
22 if (!File.Exists(path + "\\" + bllPath + ".dll"))
23 return;
24
25 Assembly bllAssembly = Assembly.LoadFile(path + "\\" + bllPath + ".dll");
26
27 Type[] types = bllAssembly.GetTypes();
28
29 foreach (Type type in types)
30 {
31 Type t1 = bllAssembly.GetType(bllPath + ".I" + type.Name);
32 if (type == null || t1 == null)
33 continue;
34 AddServer(type, t1, true, true);
35 }
36 }
WCF 自承载
WCF 自承载
1 Assembly.xml文件
2 <?xml version="1.0" encoding="UTF-8"?>
3 <AssemblyInfos>
4 <BLLFiles>
5 <BLLFile FileName="WcfService"/>
6 </BLLFiles>
7 </AssemblyInfos>
WCF 自承载

承认你丫的事情多,我用一个X妹儿没你要加载的Dll文件记录下。

然后反射去你所有的类。然后自动加载所有有协定的类。以后有新的服务在其他dll中,我加行BLLFil,哈哈哈,在此笑过。。。。

 我用这样的方式实现了,一套自己的管理系统,下载 用户名1 密码 111
 本实例源码
 感谢大家拍砖,偶也是摸着石头过河
 
 
分类: 框架设计模式
标签: c#WCF自承载TCPHTTP

WCF 自承载的更多相关文章

  1. WCF初探-8:WCF服务承载 &lpar;上&rpar;

    前言 任何一个程序的运行都需要依赖一个确定的进程中,WCF服务也不例外.如果使用WCF服务,我们就必须将服务承载于创建它并控制它的上下文和生存期的运行时环境中,承载服务环境的程序,我们称之为宿主.WC ...

  2. WCF初探-9:WCF服务承载 &lpar;下&rpar;

    在WCF初探-8:WCF服务承载 (上)中,我们对宿主的概念.环境.特点做了文字性的介绍和概括,接下来我们将通过实例对这几种寄宿方式进行介绍.为了更好的说明各寄宿环境特点,本实例采用Http和net. ...

  3. WCF服务承载

    WCF服务承载(笔记)   自托管(也做自承载) 承载 WCF 服务最灵活.最便捷的方法就是进行自承载.要能够自承载服务,必须满足两个条件.第一,需要 WCF 运行时:第二,需要可以承载 Servic ...

  4. WCF 自承载 提供源码

    一.WCF 简单介绍 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,是一套通讯接口.现在比较流行的SOA就可以通过WCF实现. ...

  5. WCF服务承载(笔记)

    自托管(也做自承载) 承载 WCF 服务最灵活.最便捷的方法就是进行自承载.要能够自承载服务,必须满足两个条件.第一,需要 WCF 运行时:第二,需要可以承载 ServiceHost 的托管 .NET ...

  6. WCF客户端承载

    http://www.cnblogs.com/wengyuli/archive/2010/12/27/1918109.html参考 Hi victory,   你提出的问题很好,这个问题,相信很多人学 ...

  7. WCF基础之承载服务和生成客户端

    wcf的承载有三种iis.was和自承载,它们如何承载园子里有很多,就不多赘述. 自iis7以后iis支持http和非http的协议,使用iis承载服务与其他两种承载相比,我觉的最明显的是was和自承 ...

  8. WCF

    --http://www.doc88.com/p-699300196010.html ---术语 WCF术语 消息(message) 消息是一个独立的数据单元,它可能由几个部分组成,包括消息正文和消息 ...

  9. WCF初探文章列表

    WCF初探-1:认识WCF WCF初探-6:WCF服务配置 WCF初探-2:手动实现WCF程序 WCF初探-7:WCF服务配置工具使用 WCF初探-3:WCF消息交换模式之单向模式 WCF初探-8:W ...

随机推荐

  1. 监控redis python脚本

    #!/bin/env python #-*- coding:utf- -*- import json import time import socket import os import re imp ...

  2. 【自动部署】Ansible 怎么通过堡垒机&sol;跳板机 访问目标机器

    Ansible机器的 /root/.ssh/config 配置如下即可:Host 目标机器IP User root IdentityFile=/root/.ssh/xxx_id_rsa ProxyCo ...

  3. android中5大布局

    Android布局也可以用HTML5做,但是用户体验性差 Android布局里XML的属性配置 1. 五种Layout中Item的基础属性: layout_width & layout_hei ...

  4. 手把手教你搭建LyncServer2013之部署及配置监控功能&lpar;十八&rpar;

    自弃用监控服务器角色以来,已对 Microsoft Lync Server 2013 监控基础结构进行了重大更改.不再采用不同的监控服务器角色(通常需要组织设置专用计算机来充当监控服务器),现在监控服 ...

  5. c&plus;&plus;11 &colon; range-based for loop

    0. 形式 for ( declaration : expression ) statement 0.1 根据标准将会扩展成这样的形式: 1   { 2     auto&& __ra ...

  6. javascript学习(4)异常处理 try-catch 和 onerror

    一.try-catch 1.样例1 1.1.源代码 1.2.执行后 2.样例2 2.1.源代码 2.2.执行后 二.onerror 1.源代码 2.执行后

  7. vue深度监控数据改变,缓存数据到本地

    项目效果图: var vm = new Vue({ el:'#app', data:{ students:[], }, watch:{ students:{ handler(){ localStora ...

  8. Qt中信号&lpar;signal&rpar;和槽&lpar;slot&rpar;的几种关联方法

    声明,个人总结,不一定正确! 1.最常见的,使用connect语句.比如:connect(btnSend,SIGNAL(clicked()),this,SLOT(clear()); 2.在 .ui设计 ...

  9. &OpenCurlyDoubleQuote;编程利器”:VSCode

    原先一直使用sublime text3,并且认为它是很好的编程利器. 但最近写代码时,发现很多代码还是提示的不够完整.我们知道,当代码名字很长时,还没有提醒,这是非常苦恼的一件事!同时它的调试功能也不 ...

  10. Qt-网易云音乐界面实现-6 迷你个人中心实现

    这个界面除了麻烦耗时,没有啥技术含量.暂时我也就把它称为迷你个人中心,因为后面还有一个个人中心了. 先看下完成品 左侧是我的,右侧是原生 个人感觉还可以吧,哈哈哈.给我自己奖励一个鸡腿. 看下头文件 ...