基本的WCF编程(实例)

完成一个基本WCF实例,要求:

1. 使用 双工契约;

2. 使用 net.tcp 绑定方式;

3. 使用 ConsoleApplication 服务,若要使用IIS 请查阅《WCF服务使用netTcpBinding》;

 

1. 定义ServiceContract

定义服务端ServiceContract, ServiceContract 特性的构造方法中,指定CallbackContract 的类型

[ServiceContract(CallbackContract = typeof(IStockServiceCallback))]
public interface IStockService
{        
    [OperationContract]
    double GetPrice(string ticker);

    [OperationContract(IsOneWay = true)]
    void RegisterForUpdate(string ticker);
}
 
public interface IStockServiceCallback
{
    [OperationContract(IsOneWay = true)]
    void PriceUpdate(string ticker, double price);
}
 

2. 实现ServiceContract

    public class StockService : IStockService
    {
        public class Worker
        {
            public string ticker;
            public Update workProcess;
        }

        public static Hashtable workers = new Hashtable();

        #region IStockService Members

        public double GetPrice(string ticker)
        {
            return 94.95;
        }

        public void RegisterForUpdate(string ticker)
        {
            Worker worker = null;

            if (!workers.ContainsKey(ticker))
            {
                worker = new Worker();
                worker.ticker = ticker;
                worker.workProcess = new Update();
                worker.workProcess.ticker = ticker;
                workers.Add(ticker, worker);
            }

            worker = (Worker)workers[ticker];
            IStockServiceCallback c = OperationContext.Current.GetCallbackChannel();
            lock (worker.workProcess.callbacks)
            {
                worker.workProcess.callbacks.Add(c);
            }

            Thread t = new Thread(new ThreadStart(worker.workProcess.SendUpdateToClient));
            t.IsBackground = true;
            t.Start();
        }

        #endregion
    }

3. 配置服务;

    WCF 服务配置比较复杂,可以通过WCF Service Configuration Editor 工具进行配置,如图:

    WCF Service Configuration Editor

    配置结果代码如下:

 
 

4. 承载服务

    使用ServiceHost类进行 , 代码如下:

  public static void Host(Type type)
        {
            using (ServiceHost servcieHost = new ServiceHost(type))
            {
                ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
                behavior.HttpGetEnabled = true;
                servcieHost.Description.Behaviors.Add(behavior);
                servcieHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex");

                servcieHost.Opened += delegate
                {
                    Console.WriteLine("{0}已启动,按键终止程序,", type.FullName);
                };
                servcieHost.Open();
                Console.ReadLine();
                servcieHost.Close();
            }
        }

5. 生成客户端

    使用svcutil.exe工具生成 config 及 Client.cs 文件,/config 指定生成配置文件,/out 指定生成Client代码文件, /async 指定生成异步处理代码执行脚本 ,:

svcutil net.tcp://localhost:809/StockService/mex /config:app.config /out:StockServiceProxy.cs /async

6. 运行程序

   运行结果如下:

   StockService执行结果

转载于:https://www.cnblogs.com/jerryshi/archive/2011/09/25/2190353.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值