[聚合文章] .net WCF简单实例

.Net 2017-12-27 18 阅读
.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 asselect * 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; }    }}

最后页面上的展示结果:

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

 

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。