WCF 动态调用(1)
很多时候,服务地址都不止一个的,这个时候就要动态去配置地址。配置Web.config,很麻烦
下面就看看怎样实现动态调用WCF。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ServiceModel; using System.ServiceModel.Channels;/// <summary> /// 动态调用WCF的工具类库 /// </summary> 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.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}
IWCFserver 是通过 svcutil.exe http://localhost:8034/WCFserver.svc?wsdl
IWCFserver dpser = InvokeContext.CreateWCFServiceByURL<IWCFserver>(Public.getXmlElementValue("LocalDpPathologySliceServ"), "basicHttpBinding");
转载于:https://www.cnblogs.com/rinack/p/5675792.html
WCF 动态调用(1)相关推荐
- 动态调用WCF服务[转]
原文地址:http://blog.csdn.net/castlooo/archive/2010/05/06/5562619.aspx 客户端调用wcf ,有时需要动态的调用服务端的WCF中的方法,本方 ...
- C#动态调用WCF接口,两种方式任你选。
REFERENCE FROM : http://www.cnblogs.com/Leo_wl/p/4762784.html 写在前面 接触WCF还是它在最初诞生之处,一个分布式应用的巨作. 从开始接触 ...
- WCF透明代理类,动态调用,支持async/await
我们希望WCF客户端调用采用透明代理方式,不用添加服务引用,也不用Invoke的方式,通过ChannelFactory<>动态产生通道,实现服务接口进行调用,并且支持async/await ...
- 客户端动态调用WCF服务中的方法
首先要写一个执行动态调用的方法:在里面实现反射调用. public static object ExecuteMethod<T>(string pUrl,string pMethodNam ...
- C#通过Kernel32.dll动态调用C++生成dll相关接口(结构体转换)相关问题整理
公司内部服务器端全部采用C++开发,自然而然暴露给客户的肯定是C++提供的API.这里不介绍为何通讯间不采用xml或和其他方式进行传输,因为这是个个别案例. 公司C++高手一大堆,我只是个C++新手, ...
- C#动态调用web服务 远程调用技术WebService
一.课程介绍 一位伟大的讲师曾经说过一句话:事物存在即合理!意思就是说:任何存在的事物都有其存在的原因,存在的一切事物都可以找到其存在的理由,我们应当把焦点放在因果关联的本质上.所以在本次分享课开课之 ...
- 【随记】动态调用web服务
通常我们在程序中需要调用WebService时,都是通过"添加Web引用",让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务.这样是使工作简单了,但是却和提供Web ...
- Xcode中Objc动态调用方法同时避免警告的几个办法
我们在Xcode中使用objc写代码的时候往往会碰到动态调用方法的时候. 如果是静态调用这很常见,不会有任何问题: [self performSelector:@selector(method)]; ...
- .NET Micro Framework动态调用C/C++底层代码(原理篇)
.NET Micro Framework和WinCE系统不同,从应用开发角度来说,仅支持C#开发(从V4.2版本开始,才支持VB.NET开发),而不像WinCE应用开发,既可以用C#/VB.Net,也 ...
最新文章
- 【转】C#生成验证码
- vue-cli创建第一个项目(用git bash解决上下键移动选择问题)
- 有关手游设计ICON的几点建议
- sklearn自学指南(part56)--朴素贝叶斯
- mysql 创建表_每天10分钟带你学会MySQL(三)表的创建
- Spring Security xsd 异常
- 关于NRF24L01模块使用的部分个人总结
- 仓鼠吃豆子 C语言编程,动态规划之仓鼠吃豆子
- 大数据开发都需要什么技术?
- 外贸常用术语_外贸业务中常用的术语
- c语言 qt 写小游戏,Qt实现Flappy Bird游戏
- 活动星投票千人共读一本书网络评选微信的投票方式线上免费投票
- 鸿蒙王者荣耀想要转区吗,王者荣耀开放转区 转区转角色服务要求条件汇总
- 恕我直言,赚钱真的不是靠拼命
- 安装vue-element-admin出现E:\Git\bin\git.EXE ls-remote -h -t ssh://git@github.com/sohee-lee7/Squire.git错误
- 前端基础2——CSS3
- 使用 elasticsearch、LogStash、Kibana完成网站流量的监控系统(基于nginx的访问日志实现流量监控)
- 怎么用计算机录制mp3的音频,怎么在电脑上录制在线音频 高音质音频如何录制...
- 7744问题 C语言
- 夜光 带你走进 Java基础编程实战(十六 Applet编程)