zoukankan      html  css  js  c++  java
  • 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会有另外一种写法 
  • 相关阅读:
    prototype常用函数
    SQL Left Join,用于在网站中显示相关联的内容
    .net中ajax实现检测用户名的完整测子
    绑定数据源后,Repeater在创建时触发的事件,以及如果在cs文件中调用某个字段的值
    sql2005 转换到 sql2000
    FCKeditor 2.6.3在ASP.NET中的配置方法
    怎样和老板谈绩效考核(3)
    If Tomorrow Never Comes
    为何会被拒(1)
    为何会被拒(2)
  • 原文地址:https://www.cnblogs.com/leidc/p/2425761.html
Copyright © 2011-2022 走看看