zoukankan      html  css  js  c++  java
  • 动态调用WCF

    转载自:ThinkLife    

    原文地址:http://hi.baidu.com/meback/item/7066d502f04144d21ef04648

    动态调用WCF服务,只需要提供*.svc地址,

    1:命名空间:

    using System.ServiceModel.Channels;
    using System.ServiceModel;

    2:创建访问类InvokeContext

    public class InvokeContext
        {

    #region Wcf服务工厂
            public static T CreateWCFServiceByURL<T>(string url)
            {
                return CreateWCFServiceByURL<T>(url, "wsHttpBinding");
            }
            public static T CreateWCFServiceByURL<T>(string url,string bing)
            {
                if (string.IsNullOrEmpty(url)) throw new NotSupportedException("this url isn`t Null or Empty!");
                EndpointAddress address = new EndpointAddress(url);
                Binding binding = CreateBinding(bing);
                ChannelFactory<T> factory = new ChannelFactory<T>(binding, address);
                return factory.CreateChannel();
            }
            #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.MaxReceivedMessageSize = 65535000;
                    bindinginstance = ws;
                }
                else if (binding.ToLower() == "netnamedpipebinding")
                {
                    NetNamedPipeBinding ws = new NetNamedPipeBinding();
                    ws.MaxReceivedMessageSize = 65535000;
                    bindinginstance = ws;
                }
                else if (binding.ToLower() == "netpeertcpbinding")
                {
                    NetPeerTcpBinding ws = new NetPeerTcpBinding();
                    ws.MaxReceivedMessageSize = 65535000;
                    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() == "wsdualhttpbinding")
                {
                    WSDualHttpBinding ws = new WSDualHttpBinding();
                    ws.MaxReceivedMessageSize = 65535000;

                    bindinginstance = ws;
                }
                else if (binding.ToLower() == "webhttpbinding")
                {
                    WebHttpBinding ws = new WebHttpBinding();
                    ws.MaxReceivedMessageSize = 65535000;
                    bindinginstance = ws;
                }
                else if (binding.ToLower() == "wsfederationhttpbinding")
                {
                    WSFederationHttpBinding ws = new WSFederationHttpBinding();
                    ws.MaxReceivedMessageSize = 65535000;
                    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

    }

    3.T为调用的接口类型,就是WCF返回的类的实例,由于我的WCF是基于接口的,所以加了一个接品类型判断,调用时直接写:Interface iface = InvokeContext.CreateWCFServiceByURL<Interface>(url);

  • 相关阅读:
    像Google Play一样让DrawerLayout拉出的抽屉在透明系统状态栏和工具栏(ToolBar)之间。
    WebView中实现延迟加载,图片点击时才加载。
    MediaPlayer配合SurfaceView或TextureView做视频播放器时的截图方法。
    解决Fragment中使用ViewPager时,ViewPager里的Fragment错位和空白问题。
    使用SAE的Storage来为Android应用提供版本更新的检查和下载功能
    使用SAE的服务来实现android端的用户反馈功能。
    使用IntentService给自己的Android应用写一个文件下载器。
    禁止进入Activity时NumberPicker自动弹出输入法。
    使用Android系统提供的DownloadManager来下载文件。
    Android异步下载图片的类和缓存图片到SD卡的类。
  • 原文地址:https://www.cnblogs.com/weivyuan/p/2554922.html
Copyright © 2011-2022 走看看