关键词: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. (Good topic)哈希表:拼写单词 (3.17 leetcode每日打卡)

    给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars. 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌 ...

  2. Go笔记(5)-String详解

    String详解 Go中的字符串是一个字节的切片,可以通过将其内容封装在双引号中来创建字符串,Go中的字符串Unicode兼容的,并且是UTF-8编码,字符串是一些字节的集合 (1)创建字符串 str ...

  3. 什么是RPC协议

    工作的时候,第一次接触CRPC协议,当时就很懵,啥是CRPC协议,一脸懵逼,于是就到网上去搜,填充知识空缺. 不少解释显得非常官方,我相信大家在各种平台上也都看到过,解释了又好像没解释,都在用一个我们 ...

  4. 从ClickHouse通往MySQL的几条道路

    一.应用背景简介 ClickHouse 是 Yandex(俄罗斯最大的搜索引擎)开源的一个用于实时数据分析的基于列存储的数据库,其处理数据的速度比传统方法快 100-1000 倍.ClickHouse ...

  5. docker启动完美容器的过程

    这里是我用docker启动所有常见的容器完美的过程,就是一次创建,后面就可以一直使用 文档: nanshaws/docker-everything: 用docker来创建各种容器,完美文档教你按照步骤 ...

  6. [GDOIpj221D] 小学生计数题

    第四题 小学生计数题 提交文件: counting.cpp 输入文件: counting.in 输出文件: counting.out 时间空间限制: 1 秒, 256 MB 作为 GDOI 的组题人, ...

  7. Vue学习笔记-生命周期

    整体页面代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  8. Java的特性、内容和环境的配置

    Java的特性和优势 简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 JDK包含JRE包含JVM JDK:Java Development Kit JRE:Java Run ...

  9. 6.elasticsearch中search template和alias

    什么是search template 顾名思义,查询模版,就是提前设定好查询的DSL,再次查询时,只需要指定对应的模版,然后传入相应的参数就好.一是可以每次不用构建复杂的DSL,二是可以供开发直接使用 ...

  10. 通过腾讯网页快捷登录协议截取 QQ邮箱 的 QQClientkey / QQKey 教程

    最近发现之前的老代码已经不能获取QQ邮箱的Clientkey,经过一番调试后发现QQ邮箱更新了获取的流程,所以决定重新发布一篇文章,废话不多,直接上教程,喜欢的朋友记得点赞加关注. step 1 首先 ...