WCF学习笔记2
WCF的服务部能孤立地存在,需要寄宿于一个运行着的进程中,我们把承载WCF服务的进程成为宿主,为服务指定宿主的过程称为服务寄宿(Service Hosting)。
WCF服务的寄宿方式:自我寄宿(Self-Hosting)和IIS寄宿两种方式。
一、创建服务契约
- 服务契约定义一般采用接口的形式进行;
- 使用System.ServiceModel.ServiceContractAttribute特性应用在接口上,从而将其定义成服务契约;
- 接口函数上要显示的应用OperationContractAttribute特性,使其成为可访问的服务接口函数;
计算器小例子,如下:
1: [ServiceContract(Name="CalculatorService",Namespace="http://www.cnblogs.com/lisgang")]
2: public interface ICalculator
3: {
4: [OperationContract]
5: double Add(double x, double y);
6: [OperationContract]
7: double Subtract(double x, double y);
8: [OperationContract]
9: double Multiply(double x, double y);
10: [OperationContract]
11: double Divide(double x, double y);
12: }
二、创建服务
- 服务实现服务契约的接口
1: public class CalculatorService : ICalculator
2: {
3: public double Add(double x, double y)
4: {
5: return x + y;
6: }
7: public double Subtract(double x, double y)
8: {
9: return x - y;
10: }
11: public double Multiply(double x, double y)
12: {
13: return x * y;
14: }
15: public double Divide(double x, double y)
16: {
17: return x / y;
18: }
三、通过自我寄宿的方式寄宿服务
WCF服务需要一村一个运行着的宿主进程,服务寄宿就是为服务指定一个宿主的过程。WCF采用给予终结点(Endpoint)的通信手段。终结点是由地址(Address)、绑定(Binding)、和契约(Contract)三要素组成,简易记忆方法为:Endpoint=ABC.
地址(Address):地址决定了服务的位置,解决了服务寻址的问题;
绑定(Binding):绑定实现了通信的所有细节,包括网络传输、消息编码、以及它为实现某种功能(比如传输安全、可靠消息传输、事务等)对消息进行的相应处理。WCF中具有一系列的系统定义绑定,比如:BasicHttpBinding、WSHttpBinding和NetTcpBinding等。
契约(Contract):契约是对服务操作的抽象,也是对消息交换模式及消息结构的定义。
服务寄宿的目的就是开启一个进程,为WCF服务提供一个运行的环境,并为服务添加一个或多个终结点,使之暴露给潜在的服务消费者。
在Hosting中加入如下代码:
1: static void Main(string[] args)
2: {
3: using (ServiceHost host=new ServiceHost(typeof(CalculatorService)))
4: {
5: host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice");
6: if (host.Description.Behaviors.Find<ServiceMetadataBehavior>()==null)
7: {
8: ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
9: behavior.HttpGetEnabled = true;
10: behavior.HttpGetUrl = new Uri("http://127.0.0.1:3721/calculatorservice/metadata");
11: host.Description.Behaviors.Add(behavior);
12: }
13: host.Opened += delegate
14: {
15: Console.WriteLine("CalculatorService已经启动,按任意键终止服务!");
16: };
17: host.Open();
18: Console.Read();
19: }
20: }
WCF服务寄宿通过System.ServiceModel.ServiceHost对象完成。在上面的代码中,基于服务类型(type(CalculatorService))创建了ServiceHost对象,并添加了一个基于WSHttpBinding绑定的终结点。该终结点的地址为:http://127.0.0.1:3721/calculatorservice,并指定了服务契约的类型ICalculator。
WCF服务的描述通过元数据(Metadata)的形式发布出来。WCF中元数据的发布通过一个特殊的服务行为ServiceMetadataBehavior来实现。
四、创建客户端调用服务
在客户端通过添加服务引用,将服务引用后,在客户端调用代码。具体如下:
1: class Program
2: {
3: static void Main(string[] args)
4: {
5: using (CalculatorServiceClient proxy=new CalculatorServiceClient())
6: {
7: Console.WriteLine(string.Format("x+y={2} when x={0} and y={1}",1,2,proxy.Add(1,2)));
8: Console.WriteLine(string.Format("x-y={2} when x={0} and y={1}", 1, 2, proxy.Subtract(1, 2)));
9: Console.WriteLine(string.Format("x*y={2} when x={0} and y={1}", 1, 2, proxy.Multiply(1, 2)));
10: Console.WriteLine(string.Format("x/y={2} when x={0} and y={1}", 1, 2, proxy.Divide(1, 2)));
11: }
12: Console.Read();
13: }
14: }
Steve 标记: WCF学习笔记内容是学习大牛蒋金楠著作的WCF全面解析的内容,自己做个总结与标记。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架