设计原则:万物皆对象

前言:在上一篇的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------无需配置,无需引用,动态绑定,轻松使用的更多相关文章

  1. plsql 无需配置客户端连接.

    plsql 无需配置客户端连接. (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.5)(PORT=1521)))(C ...

  2. python 通过Sybase ASE ODBC Driver访问sybase数据库,无需配置DSN【自己整理的】

    Python语言对于开发工程师或者测试工程师来说,应该是最高效的开发语言之一.但python访问sybase数据库的资料相对少见.而且sybase字符集为GB1803时,python访问sybase库 ...

  3. servlet 3.0无需配置web.xml,使用注入方式配置servlet实现登陆功能(服务器需要支持servlet3.0)

    首先申明上面的报错红叉,我也不知道怎么回事.总之能运行. 新建项目时选择java EE6.0,低版本没有servlet3.0. 先看一个基本示例. Test.java是用来测试无需配置文件,无需静态页 ...

  4. WCF学习笔记——配置服务引用

    WCF传过来的东西要序列化. 比如,在WCF服务中,象这么个方法 public IEnumerable<UserItem> GetUserList() 默认情况下,在客户端会调用,是这样: ...

  5. django项目外部的脚本文件执行ORM操作,无需配置路由、视图启动django服务

    #一.将脚本路径添加到python的sys系统环境变量里 import sys # sys.path.append('c:/Users/Administrator/www/mymac') #第一种.绝 ...

  6. 微信跳一跳Python辅助无需配置一键操作

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8350329.html 邮箱:moyi@moyib ...

  7. Android NDK R9 安装配置 无需Cygwin

    转自:http://www.cr173.com/soft/66623.html NDK是一个工具集,可让您实现您的应用程序使用本机代码的语言,如C和C + +.Android NDK 是在SDK前面又 ...

  8. linux chrom 系统无法读取用户偏好配置无需删除.config配置文件

    鬼使神差的使用了root权限启用了一下浏览器,再次打开就出现了这样的状况. 百度搜索了一下解决方案 几乎都是同一篇 需要删除/.config/google-chrome文件   才能正常启动. 那么如 ...

  9. Eclipse使用指定JDK,无需配置Path变量

    修改Eclipse安装目录下的eclipse.ini配置文件 将下面内容添加到文件的首部 -vmF:/Lunatic/IDE/JDK/jdk1.7.0_67/jdk1.7.0_67/bin/javaw ...

  10. SpringMvc文件上传(内部框架版 配置无需考虑 只考虑上传部分)-

    -此版本有一不足:自定义文件路径必须存在,不会自动创建 ,详看how2J

随机推荐

  1. S2_SQL_第二章

    第二章:初始mySql 2.1:mySql简介 2.1.2:mysql的优势 运行速度块,体积小,命令执行的块 使用成本低,开源的 容易使用 可移植性强 2.2:mysql的配置 2.2.1:端口配置 ...

  2. httpd日志和日志轮替工具

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  3. JavaWeb(四)EL表达式

    前言 前面详细的说明了什么是JSP和它的一些元素,这篇给大家介绍一下的是EL表达式. 用EL表达式,能更好的使用JSP中的各种内置对象和作用域. 楼主作为大四狗马上要出去面试了,内心很紧张!!! 一. ...

  4. WPF ListBox数据绑定

    本文来源 http://wshoufeng1989.blog.163.com/blog/static/202047033201282911633670/  风随影动的博客 使用数据库AllData , ...

  5. javascript中关于this指向问题详解

      前  言 LiuDaP 在前端的学习中,我们必然要用到js,js可以说是前端必不可少的的东西.在学习js的过程中,我们会经常用到this这个东西,而this的指向问题就变得尤为重要.今天正好有空闲 ...

  6. commons-pool与commons-pool2连接池(Hadoop连接池)

    commons-pool和commons-pool2是用来建立对象池的框架,提供了一些将对象池化必须要实现的接口和一些默认动作.对象池化之后可以通过pool的概念去管理其生命周期,例如对象的创建,使用 ...

  7. scala中的Type使用

    trait Base { val name: String } case class S( name: String, age: Int ) extends Base case class F( na ...

  8. win10 UWP 获取系统信息

    获取系统信息 Windows.System.Profile.AnalyticsVersionInfo analyticsVersion = Windows.System.Profile.Analyti ...

  9. HTML5之indexedDB

    从陌生到了解,花了一下午的时间,以下的地址还是不错的参考资料,省的到处去找 HTML5本地存储——IndexedDB(一:基本使用) 官方API接口文档 官方使用示例 html5 初试 indexed ...

  10. Mybatis基本用法--中

    Mybatis基本用法--中 第四部分 动态 SQL 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似.MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素 ...