WCF开发框架配置详解 WCF开发实例高级教程
WCF开发框架配置详解 WCF开发实例高级教程
WCF服务器配置 - web.config文件
WCF客户端配置 - app.config文件
客户端调用WCF接口
C# Code:
/// <summary>
/// 职员资料的WCF接口
/// </summary>
public class WCF_Employee : WCF_Base<IHR>, IBridge_Employee
{
/// <summary>
/// 获取员工资料
/// </summary>
/// <param name="employeeName"></param>
/// <returns></returns>
public DataTable GetEmplyoeeTable(string employeeName)
{
return this.Excute(client =>
{
byte[] loginTicket = WebServiceSecurity.EncryptLoginer(Loginer.CurrentUser);
byte[] bs = client.GetEmplyoeeTable(loginTicket, employeeName);
return ZipTools.DecompressionDataSet(bs).Tables[0];
});
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 职员资料的WCF接口
/// </summary>
public class WCF_Employee : WCF_Base<IHR>, IBridge_Employee
{
/// <summary>
/// 获取员工资料
/// </summary>
/// <param name="employeeName"></param>
/// <returns></returns>
public DataTable GetEmplyoeeTable(string employeeName)
{
return this.Excute(client =>
{
byte[] loginTicket = WebServiceSecurity.EncryptLoginer(Loginer.CurrentUser);
byte[] bs = client.GetEmplyoeeTable(loginTicket, employeeName);
return ZipTools.DecompressionDataSet(bs).Tables[0];
});
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
客户端WCF_Base基类
C# Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
namespace CSFrameworkV5.WebRef
{
/// <summary>
/// WCF客户端代理层-基类
/// </summary>
/// <typeparam name="T"></typeparam>
public class WCF_Base<T> where T : class
{
/// <summary>
/// 执行WCF方法
/// </summary>
/// <param name="action">调用WCF接口核心逻辑</param>
protected void Excute(Action<T> action)
{
T svc = null;
try
{
svc = WCFFactory.Create<T>();
action(svc);
this.CloseService(svc as ICommunicationObject);//关闭WCF服务
}
catch (Exception ex)
{
if (svc != null) this.CloseService(svc as ICommunicationObject);
throw ex;
}
}
/// <summary>
/// 执行WCF方法
/// </summary>
/// <typeparam name="R">数据类型</typeparam>
/// <param name="action">调用WCF接口核心逻辑</param>
/// <returns></returns>
protected R Excute<R>(Func<T, R> action)
{
T svc = null;
try
{
svc = WCFFactory.Create<T>();//创建WCF接口实例
R result = action(svc);//调用接口逻辑
this.CloseService(svc as ICommunicationObject);//关闭WCF服务
return result;
}
catch (Exception ex)
{
if (svc != null) this.CloseService(svc as ICommunicationObject);
throw ex;
}
}
/// <summary>
/// 执行指定WCF接口的方法
/// </summary>
/// <typeparam name="M">WCF接口</typeparam>
/// <typeparam name="R">数据类型</typeparam>
/// <param name="action">调用WCF接口核心逻辑</param>
/// <returns></returns>
protected R Excute<R, M>(Func<M, R> action) where M : class
{
M svc = null;
try
{
svc = WCFFactory.Create<M>();//创建WCF接口实例
R result = action(svc);//调用接口逻辑
this.CloseService(svc as ICommunicationObject);//关闭WCF服务
return result;
}
catch (Exception ex)
{
if (svc != null) this.CloseService(svc as ICommunicationObject);
throw ex;
}
}
private void CloseService(ICommunicationObject svc)
{
try
{
//查看连接状态,关闭WCF
CommunicationState state = svc.State;//创建WCF通道,默认State=Opened;
svc.Close();
//svc.Close();//测试关闭状态下,调用Close
}
catch
{
}
}
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
namespace CSFrameworkV5.WebRef
{
/// <summary>
/// WCF客户端代理层-基类
/// </summary>
/// <typeparam name="T"></typeparam>
public class WCF_Base<T> where T : class
{
/// <summary>
/// 执行WCF方法
/// </summary>
/// <param name="action">调用WCF接口核心逻辑</param>
protected void Excute(Action<T> action)
{
T svc = null;
try
{
svc = WCFFactory.Create<T>();
action(svc);
this.CloseService(svc as ICommunicationObject);//关闭WCF服务
}
catch (Exception ex)
{
if (svc != null) this.CloseService(svc as ICommunicationObject);
throw ex;
}
}
/// <summary>
/// 执行WCF方法
/// </summary>
/// <typeparam name="R">数据类型</typeparam>
/// <param name="action">调用WCF接口核心逻辑</param>
/// <returns></returns>
protected R Excute<R>(Func<T, R> action)
{
T svc = null;
try
{
svc = WCFFactory.Create<T>();//创建WCF接口实例
R result = action(svc);//调用接口逻辑
this.CloseService(svc as ICommunicationObject);//关闭WCF服务
return result;
}
catch (Exception ex)
{
if (svc != null) this.CloseService(svc as ICommunicationObject);
throw ex;
}
}
/// <summary>
/// 执行指定WCF接口的方法
/// </summary>
/// <typeparam name="M">WCF接口</typeparam>
/// <typeparam name="R">数据类型</typeparam>
/// <param name="action">调用WCF接口核心逻辑</param>
/// <returns></returns>
protected R Excute<R, M>(Func<M, R> action) where M : class
{
M svc = null;
try
{
svc = WCFFactory.Create<M>();//创建WCF接口实例
R result = action(svc);//调用接口逻辑
this.CloseService(svc as ICommunicationObject);//关闭WCF服务
return result;
}
catch (Exception ex)
{
if (svc != null) this.CloseService(svc as ICommunicationObject);
throw ex;
}
}
private void CloseService(ICommunicationObject svc)
{
try
{
//查看连接状态,关闭WCF
CommunicationState state = svc.State;//创建WCF通道,默认State=Opened;
svc.Close();
//svc.Close();//测试关闭状态下,调用Close
}
catch
{
}
}
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
WCFFactory
C# Code:
/// <summary>
/// 动态创建WCF接口透明代理
/// </summary>
/// <typeparam name="T">WCF接口,如:ICommonService</typeparam>
/// <param name="uri">连接地址</param>
/// <returns></returns>
public static T Create<T>(string uri = "") where T : class
{
//获取WCF接口的名称,如:ICommonService
string iName = typeof(T).Name;
//获取接口的URI地址,必须是主程序的App.config配置文件
if (String.IsNullOrWhiteSpace(uri))
uri = System.Configuration.ConfigurationManager.AppSettings[iName];
//支持4种凭据类型:None/ Basic / Windows / Certificate
string UseCredentials = System.Configuration.ConfigurationManager.AppSettings["UseCredentials"];
//default:None
switch (UseCredentials)
{
case "Basic": return CreateBasic<T>(uri);//Basic认证,需要指定Windows用户/密码
case "Windows": return CreateWindows<T>(uri);//Windows认证,需要指定Windows用户/密码
case "Certificate": return CreateCertificate<T>(uri);//Certificate认证,需要提供SSL证书文件
default: return CreateNone<T>(uri);
}
//是否使用https协议,默认false
//bool https = System.Configuration.ConfigurationManager.AppSettings["UseHttps"].ToLower() == "true";
//C#动态创建WCF协议配置实例(不依赖App.config配置文件)
//var myBinding = CreateWSHttpBinding(https);
//获取协议配置并创建实例,必须是主程序的App.config配置文件
//var myBinding = new WSHttpBinding("WSHttpBinding");
//var myBinding = new BasicHttpBinding("BasicHttpBinding");
//var myBinding = new NetTcpBinding("NetTcpBinding");
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 动态创建WCF接口透明代理
/// </summary>
/// <typeparam name="T">WCF接口,如:ICommonService</typeparam>
/// <param name="uri">连接地址</param>
/// <returns></returns>
public static T Create<T>(string uri = "") where T : class
{
//获取WCF接口的名称,如:ICommonService
string iName = typeof(T).Name;
//获取接口的URI地址,必须是主程序的App.config配置文件
if (String.IsNullOrWhiteSpace(uri))
uri = System.Configuration.ConfigurationManager.AppSettings[iName];
//支持4种凭据类型:None/ Basic / Windows / Certificate
string UseCredentials = System.Configuration.ConfigurationManager.AppSettings["UseCredentials"];
//default:None
switch (UseCredentials)
{
case "Basic": return CreateBasic<T>(uri);//Basic认证,需要指定Windows用户/密码
case "Windows": return CreateWindows<T>(uri);//Windows认证,需要指定Windows用户/密码
case "Certificate": return CreateCertificate<T>(uri);//Certificate认证,需要提供SSL证书文件
default: return CreateNone<T>(uri);
}
//是否使用https协议,默认false
//bool https = System.Configuration.ConfigurationManager.AppSettings["UseHttps"].ToLower() == "true";
//C#动态创建WCF协议配置实例(不依赖App.config配置文件)
//var myBinding = CreateWSHttpBinding(https);
//获取协议配置并创建实例,必须是主程序的App.config配置文件
//var myBinding = new WSHttpBinding("WSHttpBinding");
//var myBinding = new BasicHttpBinding("BasicHttpBinding");
//var myBinding = new NetTcpBinding("NetTcpBinding");
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
WCF开发框架配置详解, WCF开发实例教程

推荐文章:

WCF开发框架 - CSFrameworkV5.1旗舰版

适用开发:企业级ERP、MES、MRP、HIS、WMS、TMS、CRM、MIS、POS等数据管理系统
运行平台:Windows (Winform) + .NET Framework 4.5
开发工具:Visual Studio 2017+,C#语言
多数据库:MsSQL 2008R2 / MySql5.7.34 / Oracle 11g
C/S架构开发框架系列产品已成功应用500多家企业、6000多位软件用户,其中包括国内知名软件公司、国有企业、研发机构及上市公司(优秀企业选择了我们的产品-成功案例)。经过十年迭代升级,最新旗舰版V5.1,基础架构更成熟、应用更广泛、性能更稳定、开发效率更高!
CSFrameworkV5.1旗舰版

参考文档:
升级WCF后端通信架构,开发更简单高效!CSFrameworkV5.1旗舰版
WCF开发框架之Winform客户端配置文件 - App.config
WCF开发框架之WCF服务器配置文件 - Web.config
WCF错误“这可能是因为在HTTPS情况下使用HTTP.SYS未正确配置服务器证书”
C#源代码安全缺陷与提高源代码质量解决方案-WCF服务配置安全
WCF:SecurityNegotiationException 调用方未由服务进行身份验证
WCF采用Message安全模式运行出错:安全包中没有可用的凭证解决方案
WCF开发框架默认连接:HTTP协议+Message安全模式+Windows客户端认证
WCF顶级安全:HTTPS协议SSL证书+Windows认证+TransportWithMessageCredential安全模式
WCF开发框架-客户端采用Certificate认证模式调用基于HTTPS协议的WCF接口
调用WCF服务System.ServiceModel.ServiceActivationException:"无法激活请求的服务"
WCF开发框架-客户端采用Windows身份认证调用HTTPS协议WCF接口
WCF开发框架-客户端采用BASIC身份认证调用HTTPS协议WCF接口
vs使用透明代理工厂方式调用HTTPS协议的WCF服务
vs使用添加服务引用方式连接HTTPS协议的WCF服务
WCF开发环境客户端调试服务端跟踪代码不能命中断点解决方案
升级WCF后端通信架构,开发更简单高效!CSFrameworkV5.1旗舰版
WCF开发框架之Winform客户端配置文件 - App.config
WCF开发框架之WCF服务器配置文件 - Web.config
WCF错误“这可能是因为在HTTPS情况下使用HTTP.SYS未正确配置服务器证书”
C#源代码安全缺陷与提高源代码质量解决方案-WCF服务配置安全
WCF:SecurityNegotiationException 调用方未由服务进行身份验证
WCF采用Message安全模式运行出错:安全包中没有可用的凭证解决方案
WCF开发框架默认连接:HTTP协议+Message安全模式+Windows客户端认证
WCF顶级安全:HTTPS协议SSL证书+Windows认证+TransportWithMessageCredential安全模式
WCF开发框架-客户端采用Certificate认证模式调用基于HTTPS协议的WCF接口
调用WCF服务System.ServiceModel.ServiceActivationException:"无法激活请求的服务"
WCF开发框架-客户端采用Windows身份认证调用HTTPS协议WCF接口
WCF开发框架-客户端采用BASIC身份认证调用HTTPS协议WCF接口
vs使用透明代理工厂方式调用HTTPS协议的WCF服务
vs使用添加服务引用方式连接HTTPS协议的WCF服务
WCF开发环境客户端调试服务端跟踪代码不能命中断点解决方案
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
