在WCF客户端程序中动态创建到服务端的访问,不再需要引用配置文件

13 篇文章 0 订阅
3 篇文章 0 订阅

1.将服务接口类如IService.cs拷贝至客户端项目中

2.创建工厂类WcfChannelFactory封装问方法 
     /// <summary>
     /// 使用ChannelFactory为wcf客户端创建独立通道
     /// </summary>
     public class WcfChannelFactory
     {
         public WcfChannelFactory()
         {
         }
         /// <summary>
         /// 执行方法   nettcpbinding 绑定方式
         /// </summary>
         /// <typeparam name="T">服务接口</typeparam>
         /// <param name="pUrl">wcf地址</param>
         /// <param name="pMethodName">方法名</param>
         /// <param name="pParams">参数列表</param>
         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; 
                 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;
                         }
                     }
                 }
         }
     }

3.调用,客户端使用类似如下代码调用服务接口:

WcfChannelFactory.ExecuteMethod<IService>("net.tcp://192.168.0.1:1128/mex", "Test", pParams1,pParams2,pParams3)

需要使用返回值,则对object类型的返回值进行强制转换,如:

string sResult=(string)WcfChannelFactory.ExecuteMethod<IService>("net.tcp://192.168.0.1:1128/mex", "Test", pParams1,pParams2,pParams3)

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值