C# .NET 0配置使用Wcf
来源:互联网 发布:蘑菇街秒杀软件 编辑:程序博客网 时间:2024/06/03 19:39
设计原则:万物皆对象
背景:微软提供了一套强大的通信框架Wcf,了解请看百度百科:ttps://baike.baidu.com/item/Wcf/7374854?fr=aladdin
虽然这套通信框架很强大,但是配置起来也不简单,因此导致很多人望而却步(包括我),我这人向来不喜欢麻烦,喜欢简单,最好就是给我一个对象,告诉我怎么传参就使用是最爽的,我相信应该有很多人跟我一样的想法,因此,这篇文章应运而生,没错,就是零配置使用Wcf,下面我会详细道来。
正文:
1、核心类库,注意,需要引用程序集
System.ServiceModel
WcfHost.cs
using System;using System.ServiceModel;using System.ServiceModel.Description;using System.Threading.Tasks;namespace Coldairarrow.Util.Wcf{ /// <summary> /// Wcf服务代码控制类(必须开启管理员权限) /// </summary> /// <typeparam name="Service">服务处理</typeparam> /// <typeparam name="IService">服务接口</typeparam> public class WcfHost<Service,IService> { #region 构造函数 /// <summary> /// 构造函数 /// </summary> /// <param name="baseUrl">http基地址(服务器真实地址),默认为:http://127.0.0.1:14725/ </param> /// <param name="httpGetUrl">http获取服务引用的地址(服务器真实地址),默认为:http://127.0.0.1:14725/mex </param> public WcfHost(string baseUrl= "http://127.0.0.1:14725/", string httpGetUrl= "http://127.0.0.1:14725/mex") { _serviceHost = new ServiceHost(typeof(Service), new Uri(baseUrl)); //ServiceEndPoint 终结点 包含Address地址 Binding绑定 Contracts契约 简称ABC _serviceHost.AddServiceEndpoint(typeof(IService), new WSHttpBinding(), typeof(Service).Name); //添加服务终结点 if (_serviceHost.Description.Behaviors.Find<ServiceMetadataBehavior>() == null) { //判断是否在配置文件中定义了元数据终结点 ServiceMetadataBehavior metaData = new ServiceMetadataBehavior(); metaData.HttpGetEnabled = true; metaData.HttpGetUrl = new Uri(httpGetUrl); _serviceHost.Description.Behaviors.Add(metaData);//添加元数据终结点 } } #endregion #region 私有成员 private ServiceHost _serviceHost; #endregion #region 外部接口 /// <summary> /// 开始Wcf服务 /// </summary> public void StartHost() { Task task = new Task(() => { try { if (HandleHostOpened != null) _serviceHost.Opened += new EventHandler(HandleHostOpened); if (_serviceHost.State != CommunicationState.Opened) { _serviceHost.Open(); } } catch (Exception ex) { HandleException?.Invoke(ex); } }); task.Start(); } #endregion #region 事件处理 /// <summary> /// 当Wcf服务开启后执行 /// </summary> public Action<object, EventArgs> HandleHostOpened { get; set; } /// <summary> /// 异常处理 /// </summary> public Action<Exception> HandleException { get; set; } #endregion }}
2、服务端使用:
服务接口定义:
IService.cs
using System.ServiceModel;namespace _01.WcfServer{ /// <summary> /// 对外提供的接口规范,必须要ServiceContract特性 /// </summary> [ServiceContract] public interface IService { /// <summary> /// 对外提供的接口方法,必须OperationContract特性,方法不能重载 /// </summary> /// <returns></returns> [OperationContract] string Hello(); }}
服务接口实现:
Service.cs
namespace _01.WcfServer{ /// <summary> /// 接口具体实现类 /// </summary> public class Service : IService { /// <summary> /// 方法具体实现 /// </summary> /// <returns></returns> public string Hello() { return "Hello World"; } }}
服务端运行:注意,必须以管理员权限运行
Program.cs
using Coldairarrow.Util.Wcf;using System;namespace _01.WcfServer{ class Program { static void Main(string[] args) { //创建Wcf服务对象,泛型参数Service为实现类,IService为服务接口 //第一个参数baseUrl为服务基地址(必须为真实地址) //第二个参数httpGetUrl为服务引用地址(必须为真实地址),也就是客户端添加服务引用时用的地址 WcfHost<Service, IService> wcfHost = new WcfHost<Service, IService>("http://localhost:14725", "http://localhost:14725/mex"); //当Wcf服务开启后执行的事件 wcfHost.HandleHostOpened = new Action<object, EventArgs>((obj, tar) => { Console.WriteLine("服务已启动!"); }); //开始Wcf服务 wcfHost.StartHost(); while(Console.ReadLine()!="quit") { } } }}
客户端使用:
Program.cs
using System;namespace _02.WcfClient{ class Program { static void Main(string[] args) { //ServiceReference1为引用时自定义的命名空间 //ServiceClient为具体实现类,Service为类名,Client为后缀 //可以在很多地方使用,比如控制台,Winform,ASP.NET网站等,把它当做一个类库就很好理解了66666 ServiceReference1.ServiceClient client = new ServiceReference1.ServiceClient(); //调用Service提供的Hello方法,Wcf服务端必须运行 var data = client.Hello(); Console.WriteLine(data); Console.ReadKey(); } }}
详细使用步骤:
1、运行Wcf服务端,必须以管理员权限
2、打开浏览器,测试Wcf是否成功开启
3、客户端引用服务
右键引用,引用服务,输入服务地址(即Wcf初始化时第二个参数)
3、客户端代码调用
2、客户端成功运行
总结:
全程实现真正的0配置搭建了Wcf服务,满不满意,意不意外,惊不惊喜,爽不爽~~
最后,惯例,全部代码代码在GitHub,欢迎大家点赞~
https://github.com/Coldairarrow/Wcf
阅读全文
0 0
- C# .NET 0配置使用Wcf
- .Net Framework 2.0 使用WCF
- 使用Quartz.net、Topshelf、wcf命名管道制作的一个c#定时任务管理程序(热插拔)
- 如何配置net.tcp 的WCF服务
- WCF Asp.Net Http 通道访问配置
- .NET WCF发布 PHP调用相关配置
- 使用.net 2.0调用远程WCF服务
- IIS7 配置ASP.NET 2.0, WCF, ASP.NET MVC
- .net WCF
- 使用SSL的IIS下WCF配置
- wcf配置
- WCF配置
- wcf 配置
- WCF配置
- 配置WCF
- wcf配置
- ##WCF配置
- WCF配置
- Paxos算法细节详解(一)--通过现实世界描述算法
- Leetcode [Add Two Numbers]
- 简谈JAVA基础--HashMap
- IIS 配置PHP环境HTTP 500错误处理方法
- 管道命令和xargs的区别
- C# .NET 0配置使用Wcf
- 数组
- SMbus Host Controller not enabled
- gitlab 提交操作
- PCA降维(Opencv,C++)
- Spring-AOP @AspectJ进阶之增强织入的顺序
- MYSQL常用操作记录(草稿,仅供备忘)
- Mac Android Studio报错installation failed with message failed to finalize session;unknown failure(erro
- 分布式架构 总结(一)