EasyWcf------无需配置,无需引用,动态绑定,轻松使用
设计原则:万物皆对象
前言:在上一篇的0配置使用Wcf中,虽然使用已经很方便了,但是对于最求极致简洁得人来说(比如我),客户端需要通过手动引用服务才能够调用服务接口,那么有没有办法能够绕过手动引用这一步,并且直接通过调用地址使用呢?答案肯定是有的,不然我这篇文章就毫无意义了,而我是从来不做无意义之事,人狠话不多,下面介绍如何简单、优雅、高效的使用Wcf
正文:
首先需要引入框架,框架代码以及Demo源码在最后的Git地址中!
服务端:
定义接口:
using System.ServiceModel; namespace WcfServer
{
[ServiceContract]
public interface IMyService
{
[OperationContract]
string Hello();
}
}
实现接口:
namespace WcfServer
{
public class MyService : IMyService
{
public string Hello()
{
return "Hello World!";
}
}
}
这里只是简单输出Hello World,别的操作只需要仿造即可!
服务端启动:
using Coldairarrow.Util.Wcf;
using System; namespace WcfServer
{
class Program
{
static void Main(string[] args)
{
WcfHost<MyService, IMyService> wcfHost = new WcfHost<MyService, IMyService>("http://localhost:14725", "http://localhost:14725/mex"); wcfHost.HandleHostOpened = new Action<object, EventArgs>((obj, tar) =>
{
Console.WriteLine("服务已启动!");
}); wcfHost.StartHost(); while (Console.ReadLine() != "quit")
{ }
}
}
}
服务端与上次的使用没多大区别
注意:服务端启动必须要以管理员身份运行!
客户端:
using Coldairarrow.Util.Wcf;
using System;
using WcfServer; namespace WcfClient
{
class Program
{
static void Main(string[] args)
{
var client = WcfClientFactory.CreateClientByUrl<IMyService>("http://localhost:14725/MyService");
var data = client.Hello();
Console.WriteLine(data); Console.ReadKey();
}
}
}
客户端的使用不需要再从地址引用服务了,直接通过调用WcfClientFactory.CreateClientByUrl方法就可以返回操作接口,其中需要传入泛型接口类,也就是服务端中的IMyService。
服务端运行后,客户端直接运行即可!
运行截图如下:
服务端截图:

客户端截图:

可以看到,使用起来十分地简单方便,可以极大的提高开发效率!
老规矩,全部源码及Demo在GitHub:https://github.com/Coldairarrow/EasyWcf
大家用得爽了别忘了点星星哦~~~
分割线------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
经过了差不多半年,毕业设计也终于完成了,我的毕设是后台快速开发框架,不出意外这个框架会永远伴随着我,我也会一直完善它,希望它能够在我的职业生涯中发放光彩!
毕设虽然完成了,但是探索技术的步伐是永远不会停止的!大家一起加油~~~
END
EasyWcf------无需配置,无需引用,动态绑定,轻松使用的更多相关文章
- plsql 无需配置客户端连接.
plsql 无需配置客户端连接. (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.5)(PORT=1521)))(C ...
- python 通过Sybase ASE ODBC Driver访问sybase数据库,无需配置DSN【自己整理的】
Python语言对于开发工程师或者测试工程师来说,应该是最高效的开发语言之一.但python访问sybase数据库的资料相对少见.而且sybase字符集为GB1803时,python访问sybase库 ...
- servlet 3.0无需配置web.xml,使用注入方式配置servlet实现登陆功能(服务器需要支持servlet3.0)
首先申明上面的报错红叉,我也不知道怎么回事.总之能运行. 新建项目时选择java EE6.0,低版本没有servlet3.0. 先看一个基本示例. Test.java是用来测试无需配置文件,无需静态页 ...
- WCF学习笔记——配置服务引用
WCF传过来的东西要序列化. 比如,在WCF服务中,象这么个方法 public IEnumerable<UserItem> GetUserList() 默认情况下,在客户端会调用,是这样: ...
- django项目外部的脚本文件执行ORM操作,无需配置路由、视图启动django服务
#一.将脚本路径添加到python的sys系统环境变量里 import sys # sys.path.append('c:/Users/Administrator/www/mymac') #第一种.绝 ...
- 微信跳一跳Python辅助无需配置一键操作
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8350329.html 邮箱:moyi@moyib ...
- Android NDK R9 安装配置 无需Cygwin
转自:http://www.cr173.com/soft/66623.html NDK是一个工具集,可让您实现您的应用程序使用本机代码的语言,如C和C + +.Android NDK 是在SDK前面又 ...
- linux chrom 系统无法读取用户偏好配置无需删除.config配置文件
鬼使神差的使用了root权限启用了一下浏览器,再次打开就出现了这样的状况. 百度搜索了一下解决方案 几乎都是同一篇 需要删除/.config/google-chrome文件 才能正常启动. 那么如 ...
- Eclipse使用指定JDK,无需配置Path变量
修改Eclipse安装目录下的eclipse.ini配置文件 将下面内容添加到文件的首部 -vmF:/Lunatic/IDE/JDK/jdk1.7.0_67/jdk1.7.0_67/bin/javaw ...
- SpringMvc文件上传(内部框架版 配置无需考虑 只考虑上传部分)-
-此版本有一不足:自定义文件路径必须存在,不会自动创建 ,详看how2J
随机推荐
- IE9总是弹出“ICBC Anti-Phishing class” 加载项是否要启用还是不启用的提示
解决方法: 后来在通过查询,发现 IcbcDaemon.exe 进程是写在系统服务中的,我们可以在系统的服务管理工具中停止该服务: 1.单击开始,在搜索框中输入 services.msc ,按下回车键 ...
- Unity3D - Animator Controller循环依赖
问题 假设有2个Animator Controller,分别命名为TestControllerLhs.controller以及TestControllerRhs.controller.在TestCon ...
- jquery系列教程6-ajax的应用全解
点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...
- 邮件实现详解(四)------JavaMail 发送(带图片和附件)和接收邮件
好了,进入这个系列教程最主要的步骤了,前面邮件的理论知识我们都了解了,那么这篇博客我们将用代码完成邮件的发送.这在实际项目中应用的非常广泛,比如注册需要发送邮件进行账号激活,再比如OA项目中利用邮件进 ...
- 【学习】文本框输入监听事件oninput
真实项目中遇到的,需求是:一个文本框,一个按钮,当文本框输入内容时,按钮可用,当删除内容时,按钮不可用. 刚开始用的focus和blur, $(".pay-text").focus ...
- 【JDK1.8】JDK1.8集合源码阅读——总章
一.前言 今天开始阅读jdk1.8的集合部分,平时在写项目的时候,用到的最多的部分可能就是Java的集合框架,通过阅读集合框架源码,了解其内部的数据结构实现,能够深入理解各个集合的性能特性,并且能够帮 ...
- 干货|人人都是翻译项目的Master
在平时的工作中,我们都会经常查阅一些英文文档来解决平时遇到的问题和拓宽视野.看到好的文章或者书籍有没有想要和小伙伴分享的冲动,那么我们一起来翻译吧- 翻译主张 "信 达 雅" .& ...
- JS中最经典的全局变量和局部变量问题
话不多说,直接上例子: 1.程序的运行结果为:100 10 100 var a = 10; function test(){ a = 100; console.log(a); console.lo ...
- php的序列化和反序列化有什么好处?
序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. PHP 中的序列化和反序列 ...
- shell编程/字库裁剪(2)——编程过程
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7704085.html 作者:窗户 Q ...