WCF开发框架配置详解 WCF开发实例高级教程
作者:作者不详  发布日期:2021/11/16 19:08:36
  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_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



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开发框架配置详解, WCF开发实例教程

贴图图片-wcf实例教程


推荐文章:


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

贴图图片-CS架构软件快速开发平台旗舰版

适用开发 适用开发:企业级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旗舰版




C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务
上一篇 下一篇