wcf学习二

了解基础的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文件中,可以自己看代码 没什么好解释的 下面我来实现 一个简单的查询功能 查找用户信息所有信息 代码如下
View Code
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会有另外一种写法 
原文地址:https://www.cnblogs.com/leidc/p/2425761.html