了解基础的web服务知识之后 现在正式对wcf下手了
wcf:windows communication foundation 是用于面向服务的应用程序的框架 借助wcf,可以将数据作为异步消息从服务终结点发送至另一个服务总结点
服务终结点可以是由IIS承载的持续可用的服务的一部分,也可以是应用程序中承载的服务。简单的消息可以是作为xml发送的单个字符或单个单词。复杂消息可以使二进制数据流.
wcf的特点:服务向导 互操作性 多消息模式 服务元数据 数据契约(数据协定) 安全性 多种传输和编码方式 可靠的排队消息 持久性消息 事务 ajax和rest支持 可扩展性
正式开始写一个简单的例子
打开vs2010创建一个解决方案起名为:LearingWCF 然后在下面新建web应用程序项目起名为:WebNorthwind 再对项目添加一个 WCF服务 ,起名为:ServiceNorthWind
将为见到设计器为我们生成文件如图:
然后双击打开ServiceNorthWind文件 可以看到
namespace WebNorthwind { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“ServiceNorthWind”。 public class ServiceNorthWind : IServiceNorthWind{ public void DoWork(){} } }
这样的方法代码中定义一个类,名为ServiceNorthWind ,它实现了IServiceNorthWind接口。该接口在wcf中称之为“契约”(contract或"协议"),这是一个术语,后面在来讨论
该接口的定义在IServiceNorthWind.cs文件中,可以自己看代码 没什么好解释的 下面我来实现 一个简单的查询功能 查找用户信息所有信息 代码如下

namespace WebNorthwind
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IServiceNorthWind”。
[ServiceContract]
public interface IServiceNorthWind
{
[OperationContract]
void DoWork();
[OperationContract]
List<UserInfo> GetUserInfo();
}
}
基本意思一看就懂了 然后再到ServiceNorthWind.svc中可以看到
然后把该接口实现 改写成 如图
一个微差不多的wcf服务就写好了 ,下面开始调用该服务 在LearningWCF下新建web应用程序项目起名问:WebClient 然后新建一个页面Content.aspx
如图
添加服务引用也就是调用之前写好的web服务如图
选中之后然后下一步 先不管别的直接完成 可以看到
那么web服务的引用就完成了 双击ServiceReference1可以看到说明 之后详细解释
在content页面设置成
<form id="form1" runat="server"> <div> <asp:Button ID="btnsearch" runat="server" Text="查询" onclick="btnsearch_Click" /> <asp:GridView ID="GV" runat="server"> </asp:GridView> </div> </form>
后台调用
protected void btnsearch_Click(object sender, EventArgs e) { WebClient.ServiceReference1.ServiceNorthWindClient ws = new ServiceReference1.ServiceNorthWindClient(); GV.DataSource = ws.GetUserInfo(); GV.DataBind(); }
运行该页面就可以看到效果了 //注释数据处理用linq写的 已经不是什么新东西了就不解释了
3:之前的后台写法是同步处理 在运行中往往会 网络环境不可预测,点击之后页面会卡住一段时间也就是阻塞 。那么解决方法就用异步来处理吧
方法:删除之前的web服务引用 然后重新添加服务引用,点击下面的高级 勾选异步生成的复选框 点击确定完成 如图
然后双击服务引用项ServiceReference1 查看一下类结构如图
很显然多出了好几个方法 名为Begin和End开头,意味着他们都是"异步方法",而保持原有的名称的, 我们称为:"同步方法"。直接调用同步方法就跟之前的效果一样了。
废话不说了直接贴调用异步的方法
protected void btnsearch_Click(object sender, EventArgs e) { WebClient.ServiceReference1.ServiceNorthWindClient ws = new ServiceReference1.ServiceNorthWindClient(); ws.GetUserInfoCompleted += new EventHandler<ServiceReference1.GetUserInfoCompletedEventArgs>(ws_GetUserInfoCompleted); ws.GetUserInfoAsync(); } void ws_GetUserInfoCompleted(object sender, ServiceReference1.GetUserInfoCompletedEventArgs e) { GV.DataSource = e.Result;
GV.DataBind(); } //GetUserInfoCompleted事件添加响应函数,并在函数中将返回值绑定到界面显示,然后利用GetUserInfoAsync方法也可以进行异步调用
//winfrom会有另外一种写法