很多时候,服务地址都不止一个的,这个时候就要动态去配置地址。配置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)相关推荐

  1. 动态调用WCF服务[转]

    原文地址:http://blog.csdn.net/castlooo/archive/2010/05/06/5562619.aspx 客户端调用wcf ,有时需要动态的调用服务端的WCF中的方法,本方 ...

  2. C#动态调用WCF接口,两种方式任你选。

    REFERENCE FROM : http://www.cnblogs.com/Leo_wl/p/4762784.html 写在前面 接触WCF还是它在最初诞生之处,一个分布式应用的巨作. 从开始接触 ...

  3. WCF透明代理类,动态调用,支持async/await

    我们希望WCF客户端调用采用透明代理方式,不用添加服务引用,也不用Invoke的方式,通过ChannelFactory<>动态产生通道,实现服务接口进行调用,并且支持async/await ...

  4. 客户端动态调用WCF服务中的方法

    首先要写一个执行动态调用的方法:在里面实现反射调用. public static object ExecuteMethod<T>(string pUrl,string pMethodNam ...

  5. C#通过Kernel32.dll动态调用C++生成dll相关接口(结构体转换)相关问题整理

    公司内部服务器端全部采用C++开发,自然而然暴露给客户的肯定是C++提供的API.这里不介绍为何通讯间不采用xml或和其他方式进行传输,因为这是个个别案例. 公司C++高手一大堆,我只是个C++新手, ...

  6. C#动态调用web服务 远程调用技术WebService

    一.课程介绍 一位伟大的讲师曾经说过一句话:事物存在即合理!意思就是说:任何存在的事物都有其存在的原因,存在的一切事物都可以找到其存在的理由,我们应当把焦点放在因果关联的本质上.所以在本次分享课开课之 ...

  7. 【随记】动态调用web服务

    通常我们在程序中需要调用WebService时,都是通过"添加Web引用",让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务.这样是使工作简单了,但是却和提供Web ...

  8. Xcode中Objc动态调用方法同时避免警告的几个办法

    我们在Xcode中使用objc写代码的时候往往会碰到动态调用方法的时候. 如果是静态调用这很常见,不会有任何问题: [self performSelector:@selector(method)]; ...

  9. .NET Micro Framework动态调用C/C++底层代码(原理篇)

    .NET Micro Framework和WinCE系统不同,从应用开发角度来说,仅支持C#开发(从V4.2版本开始,才支持VB.NET开发),而不像WinCE应用开发,既可以用C#/VB.Net,也 ...

最新文章

  1. 【转】C#生成验证码
  2. vue-cli创建第一个项目(用git bash解决上下键移动选择问题)
  3. 有关手游设计ICON的几点建议
  4. sklearn自学指南(part56)--朴素贝叶斯
  5. mysql 创建表_每天10分钟带你学会MySQL(三)表的创建
  6. Spring Security xsd 异常
  7. 关于NRF24L01模块使用的部分个人总结
  8. 仓鼠吃豆子 C语言编程,动态规划之仓鼠吃豆子
  9. 大数据开发都需要什么技术?
  10. 外贸常用术语_外贸业务中常用的术语
  11. c语言 qt 写小游戏,Qt实现Flappy Bird游戏
  12. 活动星投票千人共读一本书网络评选微信的投票方式线上免费投票
  13. 鸿蒙王者荣耀想要转区吗,王者荣耀开放转区 转区转角色服务要求条件汇总
  14. 恕我直言,赚钱真的不是靠拼命
  15. 安装vue-element-admin出现E:\Git\bin\git.EXE ls-remote -h -t ssh://git@github.com/sohee-lee7/Squire.git错误
  16. 前端基础2——CSS3
  17. 使用 elasticsearch、LogStash、Kibana完成网站流量的监控系统(基于nginx的访问日志实现流量监控)
  18. 怎么用计算机录制mp3的音频,怎么在电脑上录制在线音频 高音质音频如何录制...
  19. 7744问题 C语言
  20. 夜光 带你走进 Java基础编程实战(十六 Applet编程)

热门文章

  1. 阿里巴巴向全社会开放黑科技:“泡在水里”的服务器
  2. 五大要点分析手游美术设计:如何在前5分钟抓住玩家眼球
  3. 一个游戏美术写给策划的快速入门
  4. 在气候灾难的时代,这些游戏正在用自己的方式去重新审视自然
  5. Unity热更新方案探索与讨论
  6. 前端三部曲之Html -- 1(html的基本结构和常见的meta标签的作用)
  7. LeetCode 404. 左叶子之和(Sum of Left Leaves)
  8. 复习上学期的HTML+CSS(1)
  9. python-sdk-demo的打包
  10. 一个简单的桌面应用程序框架示例(Java SE9)