zoukankan      html  css  js  c++  java
  • C#动态调用WCF接口

    这种方式比较简单,而且也是大家喜欢的,因为不需要任何配置文件就可解决,只需知道服务契约接口和服务地址就可以调用。

    string url = "http://localhost:3000/DoubleService.svc";
    IDoubleService proxy = WcfInvokeFactory.CreateServiceByUrl<IDoubleService>(url);
    int result = proxy.Add(1, 3);

    需要用到的类

    public class WcfInvokeFactory
       {
           #region WCF服务工厂
           public static T CreateServiceByUrl<T>(string url)
           {
               return CreateServiceByUrl<T>(url, "basicHttpBinding");
           }
     
           public static T CreateServiceByUrl<T>(string url, string bing)
           {
               try
               {
                   if (string.IsNullOrEmpty(url)) throw new NotSupportedException("This url is not Null or Empty!");
                   EndpointAddress address = new EndpointAddress(url);
                   Binding binding = CreateBinding(bing);
                   ChannelFactory<T> factory = new ChannelFactory<T>(binding, address);
                   return factory.CreateChannel();
               }
               catch (Exception ex)
               {
                   throw new Exception("创建服务工厂出现异常.");
               }
           }
           #endregion
     
           #region 创建传输协议
           /// <summary>
           /// 创建传输协议
           /// </summary>
           /// <param name="binding">传输协议名称</param>
           /// <returns></returns>
           private static Binding CreateBinding(string binding)
           {
               Binding bindinginstance = null;
               if (binding.ToLower() == "basichttpbinding")
               {
                   BasicHttpBinding ws = new BasicHttpBinding();
                   ws.MaxBufferSize = 2147483647;
                   ws.MaxBufferPoolSize = 2147483647;
                   ws.MaxReceivedMessageSize = 2147483647;
                   ws.ReaderQuotas.MaxStringContentLength = 2147483647;
                   ws.CloseTimeout = new TimeSpan(0, 30, 0);
                   ws.OpenTimeout = new TimeSpan(0, 30, 0);
                   ws.ReceiveTimeout = new TimeSpan(0, 30, 0);
                   ws.SendTimeout = new TimeSpan(0, 30, 0);
     
                   bindinginstance = ws;
               }
               else if (binding.ToLower() == "nettcpbinding")
               {
                   NetTcpBinding ws = new NetTcpBinding();
                   ws.MaxReceivedMessageSize = 65535000;
                   ws.Security.Mode = SecurityMode.None;
                   bindinginstance = ws;
               }
               else if (binding.ToLower() == "wshttpbinding")
               {
                   WSHttpBinding ws = new WSHttpBinding(SecurityMode.None);
                   ws.MaxReceivedMessageSize = 65535000;
                   ws.Security.Message.ClientCredentialType = System.ServiceModel.MessageCredentialType.Windows;
                   ws.Security.Transport.ClientCredentialType = System.ServiceModel.HttpClientCredentialType.Windows;
                   bindinginstance = ws;
               }
               return bindinginstance;
     
           }
           #endregion
       }

    不需要任何配置文件,适合配置多个wcf,然后在后台win服务动态调用的使用场景。

  • 相关阅读:
    HTML5 3D 粒子波浪动画特效
    CSS3手机端侧滑菜单 4种滑动菜单特效
    HTML5 Canvas生成粒子效果的人物头像
    HTML5实现手势屏幕解锁
    Slideout.js – 触摸滑出式 Web App 导航菜单
    简历特训笔记
    leetcode-184-Department Highest Salary 优化记录
    正则表达式学习笔记
    【原创】第一次实习面试
    【原创】第一次做网站的总结
  • 原文地址:https://www.cnblogs.com/tuyile006/p/6999627.html
Copyright © 2011-2022 走看看