我是学自考出身的,一般喜欢先看下实例效果。所以我就根据我对WCF的概念性的理解,创建了我的第一个WCF程序。
第一:当然是要建立WCF服务程序了。
。
![](https://www.cnblogs.com/images/cnblogs_com/aspnet2008/createProj.jpg)
程序创建后发现生成了三个文件:App.config,IService1.cs,Service1.cs
App.config代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
这是个配置文件,类似于asp.net程序中的web.config。
IService1.cs :
我删除了点其它的方法,保留了一个方法.
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
这里定义了一个接口,和普通程序中的接口是一样的,唯一不同的是在接口上面有一个特性[ServiceContract],这是契约中的一种:服务契约。有了这个标记,它就可能面向客户端了。在下面申明的方法中和普通方法也有点不同,同样是多了一个标记[OperationContract],这个标记将方法向客户端公开。
Service1.cs :它继承了上面的接口.
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
第二:有了服务端当然少不了客户端了。这我就用ASP.NET来充当了。
客户端要想应用服务端程序,一定要添加服务引用了,这里我的服务端与客户端在一个项目里面就可以直接添加服务引用了。
![](https://www.cnblogs.com/images/cnblogs_com/aspnet2008/addReference.jpg)
由于我的服务端是本地的,所在点击“发现”,程序就会发现项目中我上面创建的WCF程序。点确定就成功的添加了服务端的引用了。
第三:写客户端的调用程序。
页面代码:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
后台代码:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
上面的就是我的第一个基于HELLO WORLD 的程序了。
客户端调用时要先创建代理类
ServiceReference1 .Service1Client prox=new WebApplication1.ServiceReference1.Service1Client ();
通过这个代理类就可以调用服务端的方法了。由于只在接口是对外公开的,所有只能调用到接口的方法,你并不能直接调用Service1.cs的方法。这样和我们现在一直提倡的“面向接口编程”非常相似。
我在应用这个程序的时候,证明了WCF默认情况下是不运行操作符重载的。在C#中的利用重载是相当普遍的做法,但在WCF程序中如果你不做具体设置它会出现异常(InvalidOperationException)。
下面是错误的代码,并不能编译成功。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
WCF并不是不支持这种操作重载,而要手动指定。这里要用到OperationContract特性的Name属性。下面是正确的代码.
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
这样在生成代理的时候,程序就会自动在GetData后面加上相应的标记来区分了,这样就达到了操作重载的效果了。