zoukankan      html  css  js  c++  java
  • 动态调用wcf接口服务

    1.url:http://localhost:8002/名称.svc/basic(.svc结尾)

    2.需要引用的命名空间System.ServiceModel

    3.调用代码:

    public class InvokeContext
        {
    
            #region Wcf服务工厂
            public static T CreateWCFServiceByURL<T>(string url)
            {
                return CreateWCFServiceByURL<T>(url, "basichttpbinding");
            }
    
    
            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.MaxBufferSize = 2147483647;
                    ws.MaxBufferPoolSize = 2147483647;
                    ws.MaxReceivedMessageSize = 2147483647;
                    ws.ReaderQuotas.MaxStringContentLength = 2147483647;
                    ws.CloseTimeout = new TimeSpan(0, 10, 0);
                    ws.OpenTimeout = new TimeSpan(0, 10, 0);
                    ws.ReceiveTimeout = new TimeSpan(0, 10, 0);
                    ws.SendTimeout = new TimeSpan(0, 10, 0);
    
                    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
    
        }//end 

    4.动态调用方法接口的生成

    vs工具-》外部工具-》添加

    标题:SvcUtil

    命令:C:Program Files (x86)Microsoft SDKsWindowsv8.1AinNETFX 4.5.1 ToolsSvcUtil.exe

    初始目录:$(SolutionDir)

    勾选:提示输入参数

    取消勾选:退出时关闭

    确定

    5.生成方法接口

    工具-》SvcUtil

    会生成一个cs文件和一个config文件

    6.调用示例

    IMatterService dpser = InvokeContext.CreateWCFServiceByURL<IMatterService>("http://localhost:8002/名称.svc/basic");
    Dictionary<string, string> dic=dpser.方法名();
    IMatterService为生成的方法接口
    欢迎指正:haizi2014@qq.com
  • 相关阅读:
    windows adb shell 乱码
    sqlite时间函数及时间处理
    .net资源实现多语言界面
    2013阿里巴巴实习生面试小结
    2013金山西居挑战赛初赛1—转自blog.csdn.net/asdfgh0308/
    不用+、-、×、÷数字运算符做加法—转自zhedahht.blog.163.com
    hash思想的应用转自www.cnblogs.com/huhuuu/
    面试智力题—转自blog.csdn.net/hackbuteer1
    Spring MVC 事务注解
    没有外键关联的 关系删除遍历判断
  • 原文地址:https://www.cnblogs.com/hcfan/p/4910645.html
Copyright © 2011-2022 走看看