惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Docker
博客园 - 叶小钗
Recent Announcements
Recent Announcements
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
Hugging Face - Blog
Hugging Face - Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
美团技术团队
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
F
Fortinet All Blogs
博客园 - 三生石上(FineUI控件)
Microsoft Security Blog
Microsoft Security Blog
H
Heimdal Security Blog
有赞技术团队
有赞技术团队
The Cloudflare Blog
S
Secure Thoughts
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
The Blog of Author Tim Ferriss
M
MIT News - Artificial intelligence
Google DeepMind News
Google DeepMind News
Schneier on Security
Schneier on Security
N
News and Events Feed by Topic
小众软件
小众软件
C
Cybersecurity and Infrastructure Security Agency CISA
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - Franky
T
Tenable Blog
The Last Watchdog
The Last Watchdog
腾讯CDC
量子位
Google DeepMind News
Google DeepMind News
Help Net Security
Help Net Security
雷峰网
雷峰网
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyberwarzone
Cyberwarzone
S
Securelist
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
I
InfoQ
Spread Privacy
Spread Privacy
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - JerryShi

使用流模式传输大型数据 对象序列化之 替换(Surrogate) 使用 IExtensibleDataObject 进行往返式序列化 使用 NetDataContractSerializer 共享类型 WCF可序列化方式 序列化 VS 编码 自定义 Behavior 操作行为 之 事务 服务行为 之 元数据 服务行为 之 并发与实例化 WCF Behaviors(行为) WCF 体系结构 WCF服务 使用netTcpBinding 无法打开默认数据库 SharePoint 创建SSP时出现找不到 Windows NT 用户或组 的异常 SQL Server 2008 Mirror 泛型(一) 自定义属性Attribute(三) 自定义属性Attribute(二)
基本的WCF编程(实例)
JerryShi · 2011-09-25 · via 博客园 - JerryShi

完成一个基本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执行结果