WCF系列之.net(3.0/3.5)使用示例

WCF目前使用越来越多了,但根据不同的.NET版本,会不同的使用方式。

首先,我们在.NET(3.0/3.5)开发WCF的使用示例。

服务接口-》服务-》客户端。 也就是最常用的开发方式,也是最多的开发方式。

1.服务接口:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace WCF.IServiceAPI
{
    /// <summary>
    /// 服务接口
    /// </summary>
    [ServiceContract(Namespace= "http://yuhao.com")]
    public interface IProduct
    {
        [OperationContract]
        IEnumerable<Product> GetAll();

        [OperationContract]
        Product Get(string id);

        [OperationContract]
        void Add(Product product);

        [OperationContract]
        void Delete(string id);

        [OperationContract]
        void Update(Product product);
    }
}

数据成员:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
namespace WCF.IServiceAPI
{

    /// <summary>
    /// 实体类 yuhao 2013-2-22 Create
    /// </summary>
    [DataContract(Namespace = "http://yuhao.com")]
    public class Product
    {
        [DataMember]
        public string Id { get; set; }
        [DataMember]
        public string ProductName { get; set; }
        [DataMember]
        public string Price{get;set;}
    }
}


2.服务端-Config配置:

  <!--手工写WCF配置说明 开始-->
  <system.serviceModel>
    <services>
      <!--Name 指的是你提供服务的类名 带命名空间  behaviorConfiguration 要暴露的元数据 一般是指要提供的行为 和下面的behaviors-->
      <service name="Wcf.Server.ProductService" behaviorConfiguration="ProductSevice">
        <host><!--Host 是配置的主机-->
          <baseAddresses>
            <add baseAddress="http://127.0.0.1:1808/ProcutService"/> <!--这里是提供的服务地址-->
          </baseAddresses>
        </host>
        <endpoint address="" binding="wsHttpBinding" contract="WCF.IServiceAPI.IProduct"><!--endpoint 总结点 表示的是服务的绑定的契约和服务协议--><!--adress为空 表示使用上面的基地址-->
        </endpoint>

        <!--元数据交换的endpoint-->
        <!--注:address是mex,它会和host/baseAddresses节点中的baseAddress做拼接,即提供元数据交换的地址为:http://127.0.0.1:1808/ProcutService/mex-->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ProductSevice"><!--这里就是Service中绑定-->
          <serviceMetadata httpGetEnabled="true"/><!--暴露元数据-->
          <serviceDebug includeExceptionDetailInFaults="true"/><!--是否对错误的元数据进行Debug-->
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
   <!--结束-->

服务端-实现服务类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WCF.IServiceAPI;
namespace Wcf.Server
{
    public class ProductService:IProduct
    {
        private static IList<Product> Products = new List<Product>()
        {
            new Product{Id="1",ProductName="Iphone4s", Price="3700"},
            new Product{Id="2",ProductName="IPad3",Price="3200"}
        };

        #region IProduct 成员

        public IEnumerable<Product> GetAll()
        {
            return Products;
        }

        public Product Get(string id)
        {
            Product product = Products.FirstOrDefault(e => e.Id == id);
            if (null != product)
            {
                return product;
            }
            return null;
        }

        public void Add(Product product)
        {
            Products.Add(product);
        }

        public void Delete(string id)
        {
            Product product = this.Get(id);
            if (null != product)
            {
                Products.Remove(product);
            }
        }

        public void Update(Product product)
        {
            this.Delete(product.Id);
            Products.Add(product);
        }

        #endregion
    }
}

服务端-服务开启类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(Wcf.Server.ProductService)))
            {
                host.Open();
                Console.WriteLine("服务已经开启");
                Console.ReadKey();
            }
        }
    }
}

3.客户端调用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ProductService;
public partial class _Default : System.Web.UI.Page
{
   
    protected void Page_Load(object sender, EventArgs e)
    {

       ProductClient client = new ProductClient();

       Array.ForEach(client.GetAll().ToArray(), s => Response.Write(s.ProductName));

    }
}

至于客户端Config是调用服务类的时候,自动生成的无需手工配置

注意,在编译服务端的时候,请使用管理员身份运行VS。

 

WCF三个最最重要的就是ABC:

           第一: "A" 是地址,就是告诉别人我WCF在何处。

           第二: "B"是绑定,就是告诉别人应该走什么路才能过来。

           第三: "C"是契约:就是告诉别人我WCF这里有哪些东西。

 

常用的协议三种绑定:

          第一:wsHttpBinding,   这个binding可以认为是webservice的加强版WSE,设计的目的就是用于异构系统的交互(比如java)。

          第二:netTcpBinding,   这个binding可以认为是remoting的加强版,设计的目的就是用于不同机器的.net 程序交互,

          第三: netMsmqBinding,  这个binding可以认为是msmq的加强版本,设计目的就是脱机环境下不同机器的.net程序交互,确保信息不丢失。 

好了,文笔不好,大家谅解下,下一篇,我将讲解下载.NET(3.0/3.5)是使用WCF开发REST。

下载示例代码:WcfDemo(.net3.5).zip

posted on 2013-02-23 13:23  ~紫鱼~  阅读(530)  评论(0编辑  收藏  举报