问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

WCF中可以实现泛型接口的服务契约吗

发布网友 发布时间:2022-04-20 11:22

我来回答

2个回答

热心网友 时间:2023-06-27 17:14

Web Service是早期的技术实现了,也是soap的东西,采用的主要是http协议,假如是在C#上开发的话,需要寄宿在IIS上来实现。

WCF的话是相对较新的技术,里面的basichttpbinding可以跟以前的ws进行通信,并且集成了大部分的通信协议(几种http协议的实现以及net.Tcp实现、msmq、命名管道等实现),另外寄宿的宿主可以是命令行控制台、IIS、桌面程序等。

差别的话,感觉有这以下几点[针对C#来说的]。

    ws的话,编程模型没有wcf的那么好,具体的实现差别建议百度下,个人觉得wcf比较好。wcf可以用契约的接口方式来进行实现,而ws的话主要是通过继承WebService的类来实现的,方法上添加WebMethod特性,WCF的话是通过服务契约来声明(可以是接口也可以是类对象)

   ws的话通用性比较强,跟java等ws也可以进行互相通信,然后假如是wcf发布的服务,除了basicHttpBinding这种绑定之外,其余的几种绑定基本上不能作为互相通信。例如命名管道跟net.Tcp都是,值得说的是这里的net.Tcp跟原生的tcp是不一样的,内部实现上参考tcp的可靠连接机制进行了应用层的一套实现。

   另外一点就是服务引用跟web引用上的,这个严格来说不能属于两者的区别,只是.net版本的区别,主要是针对客户端对服务端发布好的服务进行的引用,服务引用生成的时候,会在配置文件上存在一份配置项,可以进行ABC终结点的配置,假如是web引用的话,会在setting中添加上一个硬编码的地址。建议用服务引用。

  还有一个就是客户端调用服务端开发的时候,webservice的话,基本上只能通过服务端发布的地址来进行引用[应用的方式可以参考点3],或者通过服务端提供的wsdl文件来进行引用(该种方式一般比较少,因为需要提供文件,而不是通过公开的方式来进行接口的提供,无法应对服务变更后发布问题,但是确实有这个情况的存在)。而wcf的话,还存在可以通过提供契约文件(就是声明了ServiceContract的那个接口文件)来进行服务的调用。

在接口层面的话,凡是IList<class T>以及IDictionary<class T>这一类的泛型实现都会在进行服务引用的时候,都会转换为数组的,例如void F(IList<int>)会在引用后成为void F(int[])这种方式,而才用点4提供的契约文件的话就能保持方法的原始声明。

个人建议的话,假如是新开发的系统基本上都才用wcf比较好,一个是接口的思想,一个是假如需要转换为其他协议的话可以比较方便,只需要通过配置文件修改下就可以[当前前提是没有用到特定协议的特定属性,例如服务回调,有些协议是不支持双向通信的]。而且也需要考虑发布的服务是否需要公开给别的语言进行通信。


另外楼上说的性能在下降的话,我大概说明下:

基本上针对应用的开发都是基于socket的开发,传统的socket开发的话,是需要自己去实现整个通信框架的,包括多线程处理,IOCP等的实现[基本上.net的异步通信模型在内部实现都会绑定好,IOCP是一个异步模型,自行百度],二进制流的编码处理[网络传输都是通过二进制的,例如utf8到二进制的转换],tcp无边界消息的处理[udp的话没有这个,但是包体的大小也是有*],通信协议的约定处理[例如ws跟wcf是采用soap这种,各种ws的约定,例如多少个字节表示数据流的长度、数据的检验,还是数据加密位,也包括数据的位移处理],数据上抛模型跟数据回复模型[接受到数据后是需要上抛给业务层去进行处理的,然后也需要回复给客户端,不过也不一定是这样,看需求],还有各种针对性的处理,例如客户端socket的保存[有可能对长期不适用的套接字要进行自动断开的业务]。类似wcf这种东西的话,还有序列化跟反序列化的情况[序列化跟反序列化是性能开销比较大的,例如序列化是通过反射来实现的,反射又是跟程序集的元数据有关的,属于运行时行为],假如是自己实现tcp通信模型,就不一定会有序列化跟反序列化的通信模型了,而且wcf为了让通信跟本地调用那样以及标准的方面,字节流都是比较大的,这里也会增加通信的带宽【好比自定义的协议4个字节的数据包长度+1个字节的加密压缩位+N个数据包位+X个字节的检验位,这种的话实际用到的字节就比较少了,因为在数据包里面,可以会用2个字节表示协议头,例如ox0A表示登录接口,再用4个字节表示登录名,4个字节表示密码等】。以上是简单的对socket跟wcf\ws等协议的差别说明。socket跟wcf\ws对比的话,socket性能是最高的,高并发高响应的时候,这里是有差距的,技术上的话,socket需要更加多的技术支持[开发周期长,对人员要求高],而wcf在应用层面上基本无难度,就是一些配置,出现问题也大部分可以通过百度来处理。另外一个就是托管语言本身的问题,GC这块的,GC回收的时候,是需要挂起堆栈上的线程的,而且GC的线程优先级比你所能创建的所有线程的优先级都要高,等GC执行完毕的时候才能去执行你的线程,wcf在堆对象上申请的空间也会更加多,自然导致GC会受到的概率也会更加大,这里也会可能导致wcf性能不如socket。基本上来说,C#的类都是引用对象,都是堆申请的,在引用计数超出的时候,都会被下一个GC[]操作去回收,真是个奇葩的事情。


总之,在ws跟wcf之间选择的话,个人觉得优先选择wcf好点。

如果是对性能要求较高[高并发等],或者是长连接再或者是需要用到UDP这种的话,就基本上无法用wcf跟ws这种了,wcf是没有udp协议的,http协议也只是在tcp协议下的上层协议,底层发送的数据包跟实作是不通的。另外对于长连接,虽然wcf提供了类似回调这种情况机制,只是个人不推荐使用在这种长连接的场合下。


纯手打,哎,晚上睡不着。。。。  楼主采纳了吧

热心网友 时间:2023-06-27 17:14

Web
Service是早期的技术实现了,也是soap的东西,采用的主要是http协议,假如是在C#上开发的话,需要寄宿在IIS上来实现。
WCF的话是相对较新的技术,里面的basichttpbinding可以跟以前的ws进行通信,并且集成了大部分的通信协议(几种http协议的实现以及net.Tcp实现、msmq、命名管道等实现),另外寄宿的宿主可以是命令行控制台、IIS、桌面程序等。
差别的话,感觉有这以下几点[针对C#来说的]。
1.
ws的话,编程模型没有wcf的那么好,具体的实现差别建议百度下,个人觉得wcf比较好。wcf可以用契约的接口方式来进行实现,而ws的话主要是通过继承WebService的类来实现的,方法上添加WebMethod特性,WCF的话是通过服务契约来声明(可以是接口也可以是类对象)
2.
ws的话通用性比较强,跟java等ws也可以进行互相通信,然后假如是wcf发布的服务,除了basicHttpBinding这种绑定之外,其余的几种绑定基本上不能作为互相通信。例如命名管道跟net.Tcp都是,值得说的是这里的net.Tcp跟原生的tcp是不一样的,内部实现上参考tcp的可靠连接机制进行了应用层的一套实现。
3.
另外一点就是服务引用跟web引用上的,这个严格来说不能属于两者的区别,只是.net版本的区别,主要是针对客户端对服务端发布好的服务进行的引用,服务引用生成的时候,会在配置文件上存在一份配置项,可以进行ABC终结点的配置,假如是web引用的话,会在setting中添加上一个硬编码的地址。建议用服务引用。
4.
还有一个就是客户端调用服务端开发的时候,webservice的话,基本上只能通过服务端发布的地址来进行引用[应用的方式可以参考点3],或者通过服务端提供的wsdl文件来进行引用(该种方式一般比较少,因为需要提供文件,而不是通过公开的方式来进行接口的提供,无法应对服务变更后发布问题,但是确实有这个情况的存在)。而wcf的话,还存在可以通过提供契约文件(就是声明了ServiceContract的那个接口文件)来进行服务的调用。
5.
在接口层面的话,凡是IList<class
T>以及IDictionary<class
T>这一类的泛型实现都会在进行服务引用的时候,都会转换为数组的,例如void
F(IList<int>)会在引用后成为void
F(int[])这种方式,而才用点4提供的契约文件的话就能保持方法的原始声明。
个人建议的话,假如是新开发的系统基本上都才用wcf比较好,一个是接口的思想,一个是假如需要转换为其他协议的话可以比较方便,只需要通过配置文件修改下就可以[当前前提是没有用到特定协议的特定属性,例如服务回调,有些协议是不支持双向通信的]。而且也需要考虑发布的服务是否需要公开给别的语言进行通信。
WCF代理是怎么工作的

WCF的工作原理:当创建一个服务时,它可以用来在内部网上实现跨进程、跨机器边界的客户一服务器调用。通过这个调用,可以公开队列调用和传送服务保证,并且使用完整的WS协议栈来公开可互操作的Web服务。WCF统一了早期的多种技术,即.NET Remoting、Enterprise Services、ASMX(ASP.NET web services)和WSE(We...

WCF智能编程中如何实现服务契约继承?

第1章:WCF基础&lt;/WCF(Windows Communication Foundation)是Windows平台上的一种服务框架,它允许服务提供者通过契约定义服务接口,通过绑定定义通信规则。服务的托管实现和地址配置是其核心概念,通过终结点元数据交换,客户端能够发现并调用服务。编程方式与管理方式配置并存,WCF的体系架构包括使用通道实现数据...

WCF编程目录

1. 基础篇: WCF(Windows Communication Foundation)的入门,包括什么是WCF、服务的概念、服务地址的设定、契约的设计、托管服务、绑定和终结点的选择、元数据交换以及客户端编程。章节中还详细探讨了编程方式和管理方式的配置,以及WCF的体系架构,以及如何利用通道进行通信和保证可靠性。2. 服务契约: 介绍...

WCF 详解

3. 服务扩展与功能WCF允许通过接口扩展服务,增强其可扩展性和灵活性。例如,Service1类可以通过继承扩展,添加诸如AddUser、GetUsers等方法,实现数据库操作。在实际场景中,我们可能要创建一个新闻查询服务,IService1接口将包含AddNews、GetNewsByTitle等操作,Service1类则负责与数据库交互,实现新闻管理...

一起学WCF--数据契约

定义完数据契约后 我们定义一个服务契约 客户端就可以通过该契约直接传输数据 客户端添加该契约服务 就可以看到该数据契约了 看如下实例 服务器端契约 // 注意 使用 重构 菜单上的 重命名 命令 可以同时更改代码和配置文件中的接口名 IService [ServiceContract]public interface IService { [...

WCF实战项目中如何使用Silverlight进行交互?

接着,我们将探讨如何使用WCF创建一个服务,包括创建服务接口(Service Interface)、实现服务类,以及如何发布服务到网络上。在这个过程中,你将理解如何使用命名空间、接口和契约来组织代码。然后,我们将进入实战部分。我们将搭建一个客户端,使用WCF客户端库来调用我们刚刚创建的服务。你将学会如何配置客户...

Web Service和WCF的到底有什么区别

它有一套完成的规范体系标准,而且在持续不断的更新完善中。它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键)。微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。WSDL来实现服务接口相关的描述。此外Web services 可以注册到UDDI...

跪求WCF的工作原理

。服务端提供了什么服务,都具备什么功能,这被称为WCF服务的契约。WCF服务不能凭空存在。每个WCF服务都必须托管(Hosting)在一个Windows进程中,该进程被称为宿主进程。WCF服务宿主可以由IIS提供,可以由Windows服务提供,也可以由Windows Vista的Windows激活服务提供。其中,使用IIS托管只能使用HTTP协议。

求教WCF中如何给 给 契约 和 服务类 传递参数

消息实体类,需要在契约服务中,进行传递,也就是接口的参数或返回值!才行

wcf证书号在哪里看

契约:WCF 的基本概念是以契约(Contract) 来定义双方沟通的协议,合约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。数据契约(Data Contract),订定双方沟通时的数据格式。服务契约(Service Contract),订定服务的定义。操作契约(Operation Contract),订定服务提供的方法。消息...

java 取得 实现的接口的泛型 泛型接口的实现 继承泛型接口的实现类 lambda实现泛型接口 泛型接口的继承 接口泛型 泛型不能用于接口 java接口泛型 接口泛型作用
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
尼康24 f1.4 和58 f1.4定焦镜头哪个好蜂鸟论坛 尼康28 85d2.8-4和适马24 70 2.8二代,哪个好? ...尼康14-24 F2.8 这个头要这么大光圈有什么用 开个网吧需要路由器和交换机?这路由器和家用的有什么区别?交换机是用来... 网吧交换机和网吧路由器的区别 南京儿童游乐场有哪些 ...盆栽植物上,将一分枝的叶片套上一个透明的塑料袋,扎紧袋口,一段时间... ...在一株盆栽植物上将一分枝的叶片套上一个透明的塑料袋,扎紧袋... 苹果6开不了机了怎么办啊? 抖音的歌单在哪设置? WCF服务编程一书中写到:契约操作不能使用引用对象... 英短猫wcf是什么意思和cfa的区别 技术中的wcf是什么意思? Web Service和WCF的到底有什么区别 WCF这个是什么意思? 怎么把图片做成透明水印 求教:wcf是干什么用的啊...? WCF是什么?如何学习 跪求WCF的工作原理 图片怎么做透明水印 自己16岁生日怎么发空间说说(女生) 女生伤感超拽空间说说 如果不坚强,软弱给谁看 十六岁的女生生日到了应该在QQ里面发一条什么说说 10岁女孩QQ空间说说 超长暖心的qq女生个性说说 书不成字,纸短情长。这句话意思,女生写的qq说说 对一个女生表白的qq说说 qq女生说说伤感霸气300字以上 qq说说女生霸气脏话 感动一个女孩子的QQ动态说说 为什么要用wcf 什么时候用 WCF服务契约中定义了有可选参数的操作契约,客户端... wcf是什么意思? 数据契约与消息契约的区别 WCF数据契约可以引用其他类作为[datamember]吗? WCF中DataContract和MessageContract的区别 wcf中的数据契约和ado.net实体框架问题求助 什么是WCF WCF或WebService的契约版本升级有没有好的兼容方案 wcf双工通信问题!!!!!!!!!!!!!!!!... wcf证书号在哪里看 转呼啦圈可以提高肺活量么 摇呼啦圈属于有氧运动吗能减肥吗 肺活量应该怎么锻炼呢? 转呼啦圈对健康有哪些好处?能锻炼腰部吗? 如何锻炼提高肺活量? 请问呼啦圈减肥效果好吗?怎么样用效果比较好呢?... 呼啦圈的好处是什么? 听说唱歌能增大人的肺活量,这是真的吗? 怎样可以在一个月之内快速有效的提高肺活量