Artech的 我的WCF之旅(1):创建一个简单的WCF程序
http://www.cnblogs.com/artech/archive/2007/02/26/656901.html
以前自己练习WCF是总是通过创建客户端代理类和实现所有东西都是放在创建WCF的项目里面,WCF的地址(Address),绑定(Binding),契约(Contract)
自然也是都在创建 WCF的项目里面,然后客户端创建代理里是调用,觉得真是方便啊,这玩应我看也不用学了 ,和以前的没啥区别,结果看公司的项目的WCF部分和调用WCF部分时, 彻底傻眼,找了N旧都没找见地址(Address),绑定(Binding),契约(Contract),这也没什么,问题是线上的某个WCF总是在某个关键的时刻出问题【例如某NB领导莅临指导检查】事后查看服务器日志 看了半天没搞明白 因为以前的东西没说这个东西会出这样的错误啊 才发现这个东西的确是要学的啊 在WCF上还是菜鸟啊 问题是 公司以后的项目方向是mvc+wcf啊 菜鸟不能不学啊
Artech 的WCF之旅 除了代码不能复制过来之外 我看很适合学习啊 尤其没有看书的环境只有上网的环境
我练习的项目结构
首先是WCF的 C 契约(Contract) 是个接口类,这个类可以放在WCF项目里面也可以不放在WCF里面 大多数情况,都是单独拿出来,给server和client调用,所以我们还是拿出来吧,例如我的Contracts类库中的ICalculator.cs 代码如下
[ServiceContract] public interface ICalculator { [OperationContract] string add(double x,double y); }
注意啊Contracts.ICalculator 在WCFserver和Client的配置文件中是要用的 例如
<!-- Service Endpoints WCF服务器端--> <endpoint address="" binding="wsHttpBinding" contract="Contracts.ICalculator">
<!-- clent Endpoints 客户端调用 --> <endpoint name="calculatorservice" binding="wsHttpBinding" address=http://localhost:25362/Service1.svc
contract="Contracts.ICalculator" >
WCF的c就是这个样子 另外在实现服务接口时我们总是这样
public ActionResult Index() { string result = ""; using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("calculatorservice")) { ICalculator proxy = channelFactory.CreateChannel(); using (proxy as IDisposable) { result = proxy.add(2, 3); } } ViewData["Message"] = "mywcf"+result; return View(); }
配置文件中如下配置
<system.serviceModel> <client> <!-- clent Endpoints 客户端调用 --> <endpoint name="calculatorservice" binding="wsHttpBinding"
address=http://localhost:25362/Service1.svc
contract="Contracts.ICalculator" > </endpoint> </client> </system.serviceModel>
注意 name="calculatorservice" 是一个名称例如你可以调用N个WCF服务那第N个的名字就是calculatorserviceN
WCF返回什么好呢?实体对象吗?NO 用的最多的是格式化的XML,这样别人想怎么用就怎么用
啊第一个教程马马虎虎看完了
test