客户端使用自定义代理类访问WCF服务
来源:互联网 发布:怎么进行网络直播 编辑:程序博客网 时间:2024/05/01 04:10
通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或web.config文件中产生WCF服务的客户端配置信息。若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否简单在app.config或web.config文件增加WCF服务地址,然后直接通过此地址访问WCF服务呢?可以,那就是通过自定义客户端代理类来实现。本文是通过继承ClientBase<T>类实现的自定义客户端代理类,来实现同过简单在app.config或web.config文件增加wcf服务地,然后直接通过此地址访问WCF服务。
以下以一个简单的计算器WCF服务为例:
解决方案项目目录结构:
其中WCFExample.ServiceInterface项目是WCF服务接口、WCFExample.ServiceImplement项目是WCF服务实现、WCFExample.Host项目是服务宿主、WCFExample.ServiceClient项目自定义WCF服务客户端代理、WCFExample.ServiceClientTest项目是客户端测试
WCF服务接口定义
[ServiceContract]
public interface ICalculator
{
[OperationContract]
decimal Add(decimal a, decimal b);
}
WCF服务接口实现
public class Calculator : ICalculator
{
public decimal Add(decimal a, decimal b)
{
return a + b;
}
}
WCF服务客户端自定义代理类
internal class CalculatorClient : ClientBase<ICalculator>,ICalculator
{
public CalculatorClient(Binding binding, EndpointAddress remoteAddress):base(binding,remoteAddress)
{
}
public decimal Add(decimal a,decimal b)
{
return base.Channel.Add(a, b);
}
}
服务创建工厂
internal class ServiceFactory
{
public ICalculator GetCalculatorClient(string remotingAddress)
{
if(string.IsNullOrEmpty(remotingAddress))
{
return null;
}
try
{
return new CalculatorClient(this.GetInitBinding(), new EndpointAddress(remotingAddress));
}
catch
{
return null;
}
}
public ICalculator GetCalculatorClient(string remotingAddress, Binding binding)
{
if (string.IsNullOrEmpty(remotingAddress))
{
return null;
}
try
{
return new CalculatorClient(binding, new EndpointAddress(remotingAddress));
}
catch
{
return null;
}
}
private BasicHttpBinding GetInitBinding()
{
BasicHttpBinding binding = new BasicHttpBinding();
binding.MaxBufferSize = 0x27100000;
binding.MaxReceivedMessageSize = 0x27100000L;
binding.MaxBufferPoolSize = 0x138800000L;
XmlDictionaryReaderQuotas quotas = new XmlDictionaryReaderQuotas();
quotas.MaxStringContentLength = 0x4e20000;
binding.ReaderQuotas = quotas;
return binding;
}
}
对外服务代理类
public class ServiceProxy
{
private ICalculator m_ICalculator;
public ServiceProxy(string remotingAddress)
{
m_ICalculator = new ServiceFactory().GetCalculatorClient(remotingAddress);
}
public ServiceProxy(string remotingAddress,Binding binding)
{
m_ICalculator = new ServiceFactory().GetCalculatorClient(remotingAddress, binding);
}
public decimal Add(decimal a,decimal b)
{
return m_ICalculator.Add(a, b);
}
}
客户端web.config增加服务地址
<appSettings>
<add key="WCFAddress" value="http://wcf.test.com/Calculator.svc%22/>
</appSettings>
客户端调用
decimal a = 10;
decimal b = 20;
string url = System.Configuration.ConfigurationManager.AppSettings["WCFAddress"];
ServiceProxy serviceProxy = new ServiceProxy(url);
Response.Write(serviceProxy.Add(a,b));
项目下载:http://files.cnblogs.com/binny1983/WCFExample.rar
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 客户端使用自定义代理类访问WCF服务
- 客户端使用自定义代理类访问WCF服务
- 不引用服务而使用WCF,手动编写客户端代理类
- 不引用服务而使用WCF,手动编写客户端代理类
- 不引用服务而使用WCF,手动编写客户端代理类
- WCF托管服务和客户端代理
- WCF服务编程设计规范(8):服务托管、自托管代码、客户端代理类、客户端代理管理、客户端异常管理、数据契约、SOAP与REST
- iis承载 wcf 工作流服务,客户端无法生成调用代理类
- WCF 服务客户端不使用安全措施
- 使用WCF 测试客户端测试你的WCF服务
- 使用自定义代理访问 blogspot
- WCF客户端调用服务
- WCF中可以使用SVCUtil.exe生成客户端代理类和配置文件
- WCF客户端代理文件创建和使用中的问题
- WCF分布式4:客户端访问寄宿在IIS中的WCF服务
- Android访问WCF服务
- WCF手工编写客户端代理
- 使用WCF服务的客户端出现maxReceivedMessageSize异常解决方案
- Jsoup学习之Whitelist类
- 正则表达式的语法与例子
- ios应用图标尺寸
- linux qt 安装 配置
- 2013年6月21日星期四(载入16位位图和24位位图)
- 客户端使用自定义代理类访问WCF服务
- Publish failed using Ant publisher Resource is out of sync
- 用递归算法判断数组a[N]是否为一个递增数组
- Java中实现DES加解密的一个类
- Flex简介
- CSS之背景样式
- 通化邀请赛 I-Difference
- spring+velocity+javamail发送模板邮件
- Linux 使用开源 yum 报错 Error performing checksum 解决方法