博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF 动态调用(动态创建实例接口)
阅读量:6843 次
发布时间:2019-06-26

本文共 3787 字,大约阅读时间需要 12 分钟。

很多时候,服务地址都不止一个的,这个时候就要动态去配置地址。配置Web.config,很麻烦

下面就看看怎样实现动态调用WCF

首先看看动态创建服务对象的代码:

 

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.ServiceModel;using System.ServiceModel.Channels;/// /// 动态调用WCF的工具类库/// public class InvokeContext{    #region Wcf服务工厂    public static T CreateWCFServiceByURL
(string url) { return CreateWCFServiceByURL
(url, "wsHttpBinding"); } public static T CreateWCFServiceByURL
(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
factory = new ChannelFactory
(binding, address); return factory.CreateChannel(); } #endregion #region 创建传输协议 ///
/// 创建传输协议 /// ///
传输协议名称 ///
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
 自动生成的。
IWCFserver dpser = InvokeContext.CreateWCFServiceByURL
(Public.getXmlElementValue("LocalDpPathologySliceServ"), "basicHttpBinding");

转载于:https://www.cnblogs.com/MuNet/p/6638839.html

你可能感兴趣的文章
Http状态码详解
查看>>
css属性之appearance
查看>>
js的prototype的详解(1)
查看>>
未来十年医疗健康这5个领域将最赚钱
查看>>
浅谈开源大数据平台的演变
查看>>
MySQL添加字段和修改字段的方法
查看>>
轨迹系列——通过时间及距离维度进行轨迹聚类平滑的一种方案
查看>>
项目管理(一)计时计件
查看>>
自定义控件中使用Render的writer
查看>>
36.2. rrdtool demo example
查看>>
BZOJ 2257: [Jsoi2009]瓶子和燃料【数论:裴蜀定理】
查看>>
JSP实现界面的自动跳转的几种方式
查看>>
android adb常用指令
查看>>
★如何解释特修斯之船问题?
查看>>
性能测试总结(三)--工具选型篇
查看>>
添加一条公告并标记为已读
查看>>
iOS - UIControl
查看>>
(转)现代C++函数式编程
查看>>
Android图表库MPAndroidChart(十三)——简约的底部柱状图
查看>>
[数分提高]2014-2015-2第1教学周第1次课
查看>>