关键词: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. 如何给el-table中某一列加指定内容和点击事件

    背景: 小颖最近在写项目时遇到了要给  element-ui 中的  el-table 在 v-for  el-table-column 标签时给某列加内容和点击事件,项目忙完了想着总结一下,下面一起 ...

  2. 华企盾DSC防泄密:有一个文件申请解密失败,提示拒绝访问(密钥不对)

    解决方法:将文件拖到加密进程中提示密钥不对,找到原来的数据库还原解密

  3. 反转数组、打印数组元素、加强(增强)for循环

    package com.guoba.array; public class Demo04 { public static void main(String[] args) { int[] arr = ...

  4. 踩坑ffmpeg录制的mp4无法在浏览器上播放

    前言 使用ffmpeg编译好的程序在电脑上进行音视频转换,可以参考这篇:<windows电脑FFmpeg安装教程手把手详解_windows安装ffmpeg>,而我们要做的是在游戏引擎中集成 ...

  5. C# 如何读取Excel文件

    当处理Excel文件时,从中读取数据是一个常见的需求.通过读取Excel数据,可以获取电子表格中包含的信息,并在其他应用程序或编程环境中使用这些数据进行进一步的处理和分析.本文将分享一个使用免费库来实 ...

  6. 【OpenVINO】 使用 OpenVINO CSharp API 部署 PaddleOCR 项目介绍

    前言:   在之前的项目中,我们已经使用 OpenVINOTM CSharp API 部署 PaddleOCR 全系列模型,但随着PaddleOCRv4版本发布以及OpenVINO CSharp AP ...

  7. 一文了解 Kubernetes

    一文了解 Kubernetes 简介:Docker 虽好用,但面对强大的集群,成千上万的容器,突然感觉不香了.这时候就需要我们的主角 Kubernetes 上场了,先来了解一下 Kubernetes ...

  8. 【Python】人工智能-机器学习——不调库手撕贝叶斯分类问题

    1. 作业内容描述 1.1 背景 数据集大小150 该数据有4个属性,分别如下 Sepal.Length:花萼长度(cm) Sepal.Width:花萼宽度单位(cm) Petal.Length:花瓣 ...

  9. JavaImprove--Lesson06--正则表达式

    一.正则表达式的入门 正则表达式是一些特定支付组成的,代表一个规则,简化代码,以字符的形式体现规则 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex.re ...

  10. SaaS 营销怎么做?几点思考

    按大部分 SaaS 公司组织架构,梳理了这 4 大业务部门(产品.市场.销售.服务-客户成功)的职责和客户价值链条.如图: 根据客户价值体验地图,分为两块过程: 客户营销过程 客户成功过程 针对 Sa ...