本节的主要内容:1.创建一个WCF模型的基本步骤;2.代码的下载
为了对于WCF编程模型有一个直观的印象,通过一个简单程序一步一步创建WCF应用。
一、基本步骤
1.创建一个解决方案,包含两个项目:
y.WcfFirst.Host:一个控制台应用程序,作为服务端,需要添加System.ServiceModel程序集。
y.WcfFirst.Client:控制台应用程序,作为客户端,同样需要System.ServiceModel程序集。
2. y.WcfFirst.Host 创建契约
通过ServiceContractAttribute属性类将一个接口定义为服务契约,通过OperationContractAttribute属性类作用于方法,使其可以被客户端调用。代码如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 using System.ServiceModel;
7 namespace y.WcfFirst.Host.Services
8 {
9 [ServiceContract]
10 public interface IHello
11 {
12 [OperationContract]
13 string Say(string name);
14 }
15 }
3. y.WcfFirst.Host 实现契约,代码如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 using System.ServiceModel;
7 namespace y.WcfFirst.Host.Services
8 {
9 [ServiceBehavior]
10 public class HelloService:IHello
11 {
12 [OperationBehavior]
13 public string Say(string name)
14 {
15 Console.WriteLine("Receive from Client:{0}", name);
16 return string.Format("Hello {0}!", name);
17 }
18 }
19 }
3. y.WcfFirst.Host 服务的寄宿,代码如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 using System.ServiceModel;
7 using y.WcfFirst.Host.Services;
8 namespace y.WcfFirst.Host
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 Console.Title = "y.WcfFirst.Host";
15 ServiceHost host = new ServiceHost(typeof(HelloService));
16 host.Opened += delegate
17 {
18 Console.WriteLine("\"HelloService\" is Running......\r\nPress any key to exit");
19 };
20 host.Open();
21 Console.ReadLine();
22 }
23 }
24 }
4. y.WcfFirst.Host app.config 中终结点的配置
Address:服务的地址
Binding:通信的所有细节,如:编码方式、网络传输的方式、正文是否加密等。
Contract:客户端可用的操作。
详细配置如下:
1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3 <system.serviceModel>
4 <services>
5 <service name="y.WcfFirst.Host.Services.HelloService">
6 <endpoint address="net.tcp://localhost:6666/hello"
7 binding="netTcpBinding"
8 contract="y.WcfFirst.Host.Services.IHello"></endpoint>
9 </service>
10 </services>
11 </system.serviceModel>
12 </configuration>
5. y.WcfFirst.Client 代理实现:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 using System.ServiceModel;
7 namespace y.WcfFirst.Client.Proxys
8 {
9 [ServiceContract]
10 public interface IHello
11 {
12 [OperationContract]
13 string Say(string name);
14 }
15 }
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 using System.ServiceModel;
7 using System.ServiceModel.Channels;
8 namespace y.WcfFirst.Client.Proxys
9 {
10 public class HelloProxy:ClientBase<IHello>,IHello
11 {
12 public HelloProxy()
13 : base()
14 {
15 }
16
17 public string Say(string name)
18 {
19 return base.Channel.Say(name);
20 }
21 }
22 }
6. y.WcfFirst.Client app.config中的配置,如下:
1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3 <system.serviceModel>
4 <client>
5 <endpoint name="wcfFirst"
6 address="net.tcp://localhost:6666/hello"
7 binding="netTcpBinding"
8 contract="y.WcfFirst.Client.Proxys.IHello"></endpoint>
9 </client>
10 </system.serviceModel>
11 </configuration>
7.y.WcfFirst.Cliet 对于服务的调用,代码如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 using System.ServiceModel;
7 using y.WcfFirst.Client.Proxys;
8 namespace y.WcfFirst.Client
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 Console.Title = "y.WcfFirst.Client";
15 Console.WriteLine("Please input your name:");
16 string name = string.Empty;
17 while (true)
18 {
19 name = Console.ReadLine();
20 if (name.Equals("exit"))
21 {
22 Environment.Exit(0);
23 }
24 using (HelloProxy proxy = new HelloProxy())
25 {
26 Console.WriteLine("Recevie from Server:{0}", proxy.Say(name));
27 proxy.Close();
28 }
29 }
30 }
31 }
32 }
8.运行显示,先运行服务端(host),再运行客户端(client),在客户端先后输入book,glass,显示结果如下:
二、源码下载
可以从这里下载源码。