当前位置: 首页 > news >正文

C#动态调用WCF

    public class WcfChannelFactory
    {
        public WcfChannelFactory()
        {
        }

        /// <summary>
        /// 执行方法   WSHttpBinding
        /// </summary>
        /// <typeparam name="T">服务接口</typeparam>
        /// <param name="uri">wcf地址</param>
        /// <param name="methodName">方法名</param>
        /// <param name="args">参数列表</param>
        public static object ExecuteMetod<T>(string uri, string methodName, params object[] args)
        {
            //BasicHttpBinding binding = new BasicHttpBinding();   //出现异常:远程服务器返回错误: (415) Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.。
            // WSHttpBinding binding = new WSHttpBinding();
            NetTcpBinding binding = new NetTcpBinding();
            EndpointAddress endpoint = new EndpointAddress(uri);

            using (ChannelFactory<T> channelFactory = new ChannelFactory<T>(binding, endpoint))
            {
                T instance = channelFactory.CreateChannel();
                using (instance as IDisposable)
                {
                    try
                    {
                        Type type = typeof(T);
                        MethodInfo mi = type.GetMethod(methodName);
                        return mi.Invoke(instance, args);
                    }
                    catch (TimeoutException)
                    {
                        (instance as ICommunicationObject).Abort();
                        throw;
                    }
                    catch (CommunicationException)
                    {
                        (instance as ICommunicationObject).Abort();
                        throw;
                    }
                    catch (Exception vErr)
                    {
                        (instance as ICommunicationObject).Abort();
                        throw;
                    }
                }
            }


        }


        //nettcpbinding 绑定方式
        public static object ExecuteMethod<T>(string pUrl, string pMethodName, params object[] pParams)
        {
            EndpointAddress address = new EndpointAddress(pUrl);
            Binding bindinginstance = null;
            NetTcpBinding ws = new NetTcpBinding();
            ws.MaxReceivedMessageSize = 20971520;
            ws.Security.Mode = SecurityMode.None;
            bindinginstance = ws;
            using (ChannelFactory<T> channel = new ChannelFactory<T>(bindinginstance, address))
            {
                T instance = channel.CreateChannel();
                using (instance as IDisposable)
                {
                    try
                    {
                        Type type = typeof(T);
                        MethodInfo mi = type.GetMethod(pMethodName);
                        return mi.Invoke(instance, pParams);
                    }
                    catch (TimeoutException)
                    {
                        (instance as ICommunicationObject).Abort();
                        throw;
                    }
                    catch (CommunicationException)
                    {
                        (instance as ICommunicationObject).Abort();
                        throw;
                    }
                    catch (Exception vErr)
                    {
                        (instance as ICommunicationObject).Abort();
                        throw;
                    }
                }
            }
        }
    }

 

转载于:https://www.cnblogs.com/liyangLife/p/5632384.html

相关文章:

  • ora_01810:格式代码出现两次
  • 前段
  • 用Redis存储Tomcat集群的Session
  • XForms - 更强大的Form
  • Git学习总结(6)——作为一名程序员这些代码托管工具你都知道吗?
  • PHP SPL笔记
  • 三十六计阅读手记
  • PAT (Advanced Level) 1112. Stucked Keyboard (20)
  • SVN代码丢失惊魂
  • 【jacob word】使用jacob,合并多个word为一个word文件
  • string、wstring、cstring、 char、 tchar、int、dword转换方法(转)
  • 对动画对概念和动画实现的思想的理解
  • pomelo连接redis
  • 推荐几款软件界面模型设计工具
  • BZOJ3189 : [Coci2011]Slika
  • Cumulo 的 ClojureScript 模块已经成型
  • exif信息对照
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Linux CTF 逆向入门
  • PAT A1050
  • Spring Boot MyBatis配置多种数据库
  • Unix命令
  • XForms - 更强大的Form
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 后端_ThinkPHP5
  • 面试总结JavaScript篇
  • 区块链分支循环
  • 推荐一个React的管理后台框架
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 我这样减少了26.5M Java内存!
  • 用Canvas画一棵二叉树
  • 正则表达式
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (pytorch进阶之路)扩散概率模型
  • (备忘)Java Map 遍历
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (六)激光线扫描-三维重建
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (转) Android中ViewStub组件使用
  • (转)jdk与jre的区别
  • *上位机的定义
  • .cfg\.dat\.mak(持续补充)
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具