[老老实实学WCF] 第八篇 实例化

老老实实学WCF

第八篇 实例化

 

通过上一篇的学习,我们简单地了解了会话,我们知道服务端和客户端之间可以建立会话连接,也可以建立非会话连接,通信的绑定和服务协定的ServiceContract 的SessionMode属性共同决定了连接是否是会话的。会话连接在会话保持阶段服务端可以记住客户端,而非会话连接则不会,相同客户端的多次调用会被认为是不同的客户端发起的。

 

会话这个特性是许多其他特性的基础,例如我们今天要学习的实例化。连接是否是会话对实例化的过程将产生不同的影响。今天我们就来研究这个问题。

 

1. 什么是实例化

那么,什么是实例化呢?我们知道,要调用一个类的方法,如果这个类不是静态类,首先要将这个类实例化从而获得这个类的一个对象,然后在这个对象上调用方法,这是面向对象的基本知识,而我们服务端上寄存的服务,也是一个类,是一个实现了服务接口的类,因此,客户端在调用这个类的方法时,服务端一定也要将这个类先实例化出一个对象,然后在这个对象上调用方法,将结果返回给客户端。

 

我们在这里探讨的实例化就是当客户端调用服务端服务方法时,服务端如何对服务类进行实例化的问题。

2. 实例化的几种模式

我们不禁要疑问,实例化不就是new嘛,new有什么可说的,直接实例化然后调用最后返回,这似乎没什么特别的地方。

new的话题我觉得是个挺深的问题,它也一直是面向对象编程理论中比较重要的一环。如何正确的控制实例化的时间和地点是许多设计模式着手解决的问题。我们在本地编程模型中不太多关注到它,可能常用的也就是为共享资源建立一个单例,或者为上层调用建立一个工厂。甚至随用随new的情况也都稀松平常。

然而我们应该重视实例化的方式,尤其在面向服务这样的模型中,实例化方式的不同会显著的影响性能和伸缩性。

 

按照最简单的考量,每次客户端的方法调用服务端都实例化一个对象然后为其服务,调用完就把对象销毁,也就是随用随new。这样看上去最简单明了,但是性能可能不太好,创建对象和销毁对象都是有开销的。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
WCF是一种用于创建分布式系统的技术,可与vb.net一起使用。 WCF中可以使用多种协议进行网络通信,例如HTTP,TCP和MSMQ等。下面是一个vb.net的WCF网络通信实例: 首先,要创建一个WCF服务,您可以使用Visual Studio中的模板。在创建服务时,可以选择使用什么类型的绑定和协议。例如,默认情况下会使用基本HTTP绑定和HTTP协议。 在服务中定义操作合同,这些合同将服务公开为web服务,可以使用它们来处理远程请求。 在客户端应用程序中,您需要首先添加服务引用,可以通过Visual Studio的“添加服务引用”向导来完成。然后,您可以使用该服务的客户端代理来调用远程服务,就像在本地应用程序中一样。 以下是一个简单的WCF服务和客户端应用程序示例: 服务代码: ```vb.net Imports System.ServiceModel <ServiceContract()> Public Interface ICalculator <OperationContract()> Function Add(ByVal x As Double, ByVal y As Double) As Double End Interface Public Class Calculator Implements ICalculator Public Function Add(ByVal x As Double, ByVal y As Double) As Double Implements ICalculator.Add Return x + y End Function End Class Sub Main() Dim host As New ServiceHost(GetType(Calculator)) host.Open() Console.WriteLine("Service started. Press any key to stop.") Console.ReadLine() host.Close() End Sub ``` 客户端代码: ```vb.net Module Module1 Sub Main() Dim client As New CalculatorClient() Console.WriteLine("2 + 3 = " & client.Add(2, 3)) client.Close() Console.ReadLine() End Sub End Module <ServiceContract()> Public Interface ICalculator <OperationContract()> Function Add(ByVal x As Double, ByVal y As Double) As Double End Interface Public Class CalculatorClient Inherits ClientBase(Of ICalculator) Implements ICalculator Public Function Add(ByVal x As Double, ByVal y As Double) As Double Implements ICalculator.Add Return Channel.Add(x, y) End Function End Class ``` 在这个例子中,我定义了一个名为“Calculator”的简单计算器服务,它具有一个Add操作。在客户端应用程序中,我使用了一个名为“CalculatorClient”的客户端代理来调用Add操作,该代理使用了WCF中的默认HTTP绑定和HTTP协议来与服务通信。 这就是一个简单的WCF网络通信示例,您可以开始使用WCF来创建自己的分布式应用程序,用于实现您的网络通信需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值