• .net WCF简单实例


      最近看到网上招聘有许多都需要WCF技术的人员,我之前一直没接触过这个东西,以后工作中难免会遇到,所谓笨鸟先飞,于是我就一探究竟,便有了这边文章。由于是初学WCF没有深入研究其原理,只是写了一个demo留着以后,如果哪里写的不对希望大佬们能指出批评。个人认为WCF类似于Web Services(类似,肯定是有区别的,至于啥区别可以搜搜资料),不多说了,接下来看我简单实现的demo吧。

      WCF服务用于两个不同项目中的调用,在这里我举例项目A调用WCF服务实现查询数据功能。

    第一步:创建数据库,有点数据能展示出来就行。

    Create database SalesLibrary    --创建库
    
    Create table SalesVolume        --创建表
    (
        Id int,
        Num int,
        Product varchar(20)
    )

    第二步:创建存储过程(可以没有此步,只是方便查询)。

    create proc proc_ShowSalesVolume 
    as
    select * from dbo.SalesVolume 

    第三步:创建一个WCF解决方案。

       删除掉默认的Iservice1和Service1,创建自己的WCF服务名称。

    第四步:编写WCF服务。

      在IsalesVolumeOperation接口中写一个现实数据的方法ShowSalesVolume,一定要写上[OperationContract],如若不写外界无法对其进行调用。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    using System.Data;
    
    namespace WCFServices
    {
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“ISalesVolumeOperation”。
        [ServiceContract]   // 服务合同 即提供服务的接口或类
        public interface ISalesVolumeOperation
        { 
    
            [OperationContract] //服务契约   即提供服务的实现方法
            DataTable ShowSalesVolume();
        }
    }

      在salesVolumeOperation中完善查询的的过程以及需要返回的参数。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace WCFServices
    {
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“SalesVolumeOperation”。
        // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 SalesVolumeOperation.svc 或 SalesVolumeOperation.svc.cs,然后开始调试。
        public class SalesVolumeOperation : ISalesVolumeOperation
        {
            public DataTable ShowSalesVolume()
            {
                DataSet ds = new DataSet();
                SqlConnection con = new SqlConnection("data source=.;initial catalog=SalesLibrary;user id=sa;password=sa123");
                string sql = "proc_ShowSalesVolume";      //存储过程名称
                using (SqlCommand cmd = new SqlCommand(sql, con))
                {
                    con.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
    
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    da.Fill(ds);
                }
                return ds.Tables[0];
            }
        }
    }

    第五步:对WCF服务接口测试看看是否无误。

      选中SalesVolumeOperation.svc右键在浏览器中查看,然后复制其路径。

      打开测试工具SoapUI,将路径复制到initial WSDL 然后在路径结尾写上?wsdl。

      接着开始进行测试:

      看来WCF服务没有出现问题,那么我们就开始创建第二个程序来访问这个WCF服务。

    第六步:创建ASP.NET Web 应用程序(和WCF不在同一个解决方案)。

      选择空版本就行,然后右键服务-->添加服务引用-->高级-->添加web引用:

      然后在解决方案中就可以看到:

    第七步:实现调用WCF服务。

      新建一个页面用于展示数据,名为ShowData.aspx

    前台代码:

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Repeater ID="Repeater1" runat="server">
                <ItemTemplate>
                    <%#Eval("Id") %>
                    <%#Eval("Num") %>
                    <%#Eval("Product") %>
                    <br />
                </ItemTemplate>
            </asp:Repeater>
        </div>
        </form>
    </body>
    </html>

    后台代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    
    namespace WebUI
    {
        public partial class ShowData : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                 if(!IsPostBack)
                 {
                     GetSalesVolume();
                 }
            }
            private void GetSalesVolume()
            {
                SalesVolumeOperation.SalesVolumeOperation sa = new SalesVolumeOperation.SalesVolumeOperation();     //实例化WCF接口
                DataTable dt = sa.ShowSalesVolume();        //接口下的方法
                List<SalesVolume> list = new List<SalesVolume>();
                SalesVolume sv;
                foreach(DataRow dr in dt.Rows)
                {
                    sv = new SalesVolume();
                    sv.Id = Convert.ToInt32(dr["Id"]);
                    sv.Num = Convert.ToInt32(dr["Num"]);
                    sv.Product = dr["Product"].ToString();
                    list.Add(sv); 
                }
                Repeater1.DataSource = list;
                Repeater1.DataBind();
    
            }
        } 
        public class SalesVolume
        {
            public int Id { get; set; }
            public int Num { get; set; }
            public string Product { get; set; }
        }
    }

    最后页面上的展示结果:

    好了,到这里就完事儿了,哪里写的不对希望大家指正~

  • 相关阅读:
    时间那点儿事儿 -- 时间戳,时区,冬令时,夏令时
    iOS: 并发编程的几个知识点
    iOS: 聊聊 Designated Initializer(指定初始化函数)
    iOS 滑动性能优化
    iPad 多任务 Spilt View & Size Class
    iOS: 如何正确的绘制1像素的线
    iOS: Crash文件解析(一)
    iOS:使用MVC模式帮ViewController瘦身
    iOS:项目中疑难Crash问题集锦
    最近面试人的一点儿感受
  • 原文地址:https://www.cnblogs.com/swjian/p/8126202.html
Copyright © 2020-2023  润新知