关键词:WCF动态调用、动态调用WCF、WCF使用动态代理精简代码架构、使用反射执行WCF接口

代码地址:

https://gitee.com/s0611163/DynamicWCF

https://github.com/0611163/DynamicWCF

DynamicWCF

介绍

动态WCF:使用动态代理精简WCF代码架构

软件架构

CS架构

引用开源库

  1. Autofac:一个IOC框架
  2. Castle.core:一个AOP框架
  3. NLog:日志框架

工程说明

  1. WCFClient:客户端
  2. WCFClientProxy:客户端WCF动态代理
  3. WCFCommon:通用工程,封装日志和IOC功能
  4. WCFContract:WCF契约
  5. WCFModel:实体类
  6. WCFService:WCF服务端实现
  7. WCFServiceProxy:服务端WCF动态代理
  8. WCFServiceHost:WCF服务端宿主

使用说明

现有程序框架中使用的话,只需要服务端引入WCFServiceProxy.dll和WCFCommon.dll,客户端引入WCFClientProxy.dll和WCFCommon.dll

一、 服务端

1. 引用WCFServiceProxy.dll和WCFCommon.dll

2. 服务契约添加RegisterServiceAttribute:

[RegisterService]
[ServiceContract]
public interface ITestService

说明:为什么要使用RegisterServiceAttribute?是为了兼容旧的WCF服务端和客户端架构,以便改造现有项目,原来的架构不变,为了精简增删改查代码,额外引入该框架。

3. 服务实现类继承IService:

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class TestService : ITestService, IService

4. 程序启动时添加如下代码:

int serverPort = int.Parse(ConfigurationManager.AppSettings["ServerPort"]);
Assembly serviceAssembly = Assembly.GetAssembly(typeof(TestService));
Assembly contractAssembly = Assembly.GetAssembly(typeof(ITestService));
string contractNamespace = "WCFContract"; HostFactory.CreateHosts(serverPort, serviceAssembly, contractAssembly, contractNamespace); ServiceHelper.StartAllService();

注意:约定WCF契约接口名称为服务名称前加大写字母I,例如服务名称为TestService,则WCF契约接口名称为ITestService

二、 客户端

客户端使用起来非常简单

1. 引用WCFClientProxy和WCFCommon.dll

2. 使用前初始化PF工厂类:

PF.Init(ConfigurationManager.AppSettings["WCFServiceAddress"]); //初始化PF

3. 使用:

List<TestData> list = PF.Get<ITestService2>().GetBigData("001", "测试001");

WCF 动态调用 动态代理的更多相关文章

  1. Java父类对象调用子类实体:方法重写与动态调用

    众所周知Java的handle和C++的ponter而不是object对应,我们很熟悉C++的父类pointer调用子类实体的例子,那么对于Java的handle是不是也可以这样呢? 这里我先给一个例 ...

  2. [转]linux 调用动态库so文件

    记录一个面试被问到的问题. extern 有什么用途? 除了多文件共享全局变量外还有呢? extern "C" 的功能? 我想看完这篇文章就可以知道第三个问题了. 关于动态调用动态 ...

  3. C# 中静态调用C++dll 和C# 中动态调用C++dll

    在最近的项目中,牵涉到项目源代码保密问题,由于代码是C#写的,容易被反编译,因此决定抽取核心算法部分使用C++编写,C++到目前为止好像还不能被很好的反编译,当然如果你是反汇编高手的话,也许还是有可能 ...

  4. [转]Delphi DLL的创建、静态 以及动态调用

    第一章  DLL简单介绍 由于在目前的学习工作中,需要用到DLL文件,就学习了下,在这里作个总结. 首先装简单介绍下DLL: 1,减小可执行文件的大小 DLL技术的产生有很大一部分原因是为了减小可执行 ...

  5. WCF透明代理类,动态调用,支持async/await

    我们希望WCF客户端调用采用透明代理方式,不用添加服务引用,也不用Invoke的方式,通过ChannelFactory<>动态产生通道,实现服务接口进行调用,并且支持async/await ...

  6. 动态调用webservice及WCF服务

    动态调用web服务,该方法只针对Web service, WCF的服务不行,如果是WCF的就通过工具直接生产代理类,把代理类配置到调用的项目中,通过配置客户端的终结点动态的取实现: 通过Svcutil ...

  7. c# 动态调用WCF方法笔记!

    //动态调用wcf方法 string url = "http://localhost:54379/ServiceWCF.svc"; IDoubleService proxy = W ...

  8. Atitit 动态调用webservice与客户端代理方式调用

    Atitit 动态调用webservice与客户端代理方式调用 方式1: 使用call.invoke  直接调用WSDL,缺点:麻烦,不推荐--特别是JAVA调用.NET的WS时,会有不少的问题需要解 ...

  9. C#动态调用WCF接口,两种方式任你选。

    写在前面 接触WCF还是它在最初诞生之处,一个分布式应用的巨作. 从开始接触到现在断断续续,真正使用的项目少之又少,更谈不上深入WCF内部实现机制和原理去研究,最近自己做一个项目时用到了WCF. 从这 ...

  10. 动态调用WCF服务

    动态调用WCF服务,只需要提供*.svc地址, 1:命名空间: using System.ServiceModel.Channels;using System.ServiceModel; 2:创建访问 ...

随机推荐

  1. K8s 多租户方案的挑战与价值

    在当今企业环境中,随着业务的快速增长和多样化,服务器和云资源的管理会越来越让人头疼.K8s 虽然很强大,但在处理多个部门或团队的业务部署需求时,如果缺乏有效的多租户支持,在效率和资源管理方面都会不尽如 ...

  2. GitHub Desktop安装与使用教程

    一.安装 1.下载 下载地址 2.安装 下载之后GitHub Desktop是没有安装步骤的,而是开始安装之后,稍等片刻就安装成功了. 然后登陆个人GitHub账号就可以进行一下操作了. 二.新建仓库 ...

  3. ARM汇编指令实验

    题目 地址为0x40008000起始的内存中存放了20个无符号的8位整数,请编写ARM汇编程序实现如下功能: 采用冒泡法将以上内存中的数据按照从小到大的顺序排列. 注意:在验收实验时,需要自己把具体的 ...

  4. ES到底是个什么东西

    概念:全文检索服务器(是基于Lucene开发的全文检索服务器),它可以近乎实时存储.检索数据,底层仍然是Lucene来实现的所以索引和搜索功能,他的目的是通过的简单的RESTFul API 来隐藏Lu ...

  5. 高效的 Json 解析框架 kotlinx.serialization

    一.引出问题 你是否有在使用 Gson 序列化对象时,见到如下异常: Abstract classes can't be instantiated! Register an InstanceCreat ...

  6. Vue入门(1)安装vue环境,创建Vue2 Vue3的项目并且安装IIS环境和发布到IIS

    Vue环境的搭建 一.     背景 vue的运行方式有两种 一种是在页面引用vue的js包, 一种是搭建脚手架来vue框架. 我们在这里使用的是第二种方式. 需要安装的软件 npm 16.13.1 ...

  7. Shell下处理JSON数据工具向导

    目录 下载离线安装包 安装 源码包安装 选项及含义 JQ 程序代码演示在线平台 JQ 语法 基本过滤器 身份运算符 --- . 标识符-索引 --- .foo`, `.foo.bar 对象索引 --- ...

  8. node版本管理工具推荐

    hello,今天给大家分享几款 node 版本管理的工具. 背景 在开发前端项目的时候,特别是新到公司接手一个多年维护的老项目时,如果 node 版本不正确,有的插件可能无法正确安装,比如我之前提到的 ...

  9. .Net人的自我修养-书目汇总

    .Net人的自我修养-书目汇总 2019年来现在的公司开始从事.Net相关的工作.记录一下工作以来看过(或者翻过)和听过还不错打算看相关的技术书籍或资料. 为了方便给大家参考,看(翻)过书目以难度排序 ...

  10. apex的安装过程及问题解决(ModuleNotFoundError:No module named 'packaging')

    最近在复现代码时遇到了如下问题,在此记录一下问题的解决过程: 步骤一 git clone https://github.com/NVIDIA/apex.git 步骤二 cd apex 步骤三 pip ...