什么是WCF?它能做什么?

4

我查了一下WCF,但并没有完全弄清楚它是什么。我找到了这个页面,看起来它是一种应用程序允许其他应用程序调用函数的方式。有点像加载DLL并调用函数,但使用TCP而不是加载DLL并强制用户运行应用程序。

我仍然感到困惑。有人能解释一下它的用途吗?

看起来如果我运行两个可以托管相同服务的应用程序,只有第一个会运行,其余的会出错? 我可以调用函数,但是否有内存限制?我可以将byte[]作为参数传递,分配在堆栈或堆上吗? 我不能传递文件句柄,对吧?(我想不出为什么要这样做)。

我可以轻松地让3个应用程序成为客户端吗?比如我打开app1并打开一张图片。我可以打开app2和3,让它们对当前加载的图像进行不同的操作吗?(app1)编辑,2)导出为不同类型的内存中的图像(动画gif、avi、png等),3)不同的编辑工具或应用程序,以查看运行时的外观。


可能是什么是WCF?的重复问题。 - John Saunders
3个回答

5

@acidzombie24,回应你对Ryan答案的评论:

WCF并不是远程函数调用 - 它完全不同!

WCF是一个基于消息的通信系统 - 您的客户端将拥有一个与服务器相同方法的代理。当您在客户端代理上调用这样的函数时,WCF运行时会将那些方法参数、方法名称和一些头信息打包成一个序列化的消息,并将其发送到服务器。

客户端和服务器之间没有像远程协议或数据库连接那样始终保持开放的常量连接。客户端打包消息并发送。客户端和服务器之间的传输媒介甚至可以是SMTP(电子邮件)!

一旦服务器接收到消息,WCF运行时将实例化您的服务类的一个实例来处理该请求。该服务类的适当方法将被调用,参数被传入,服务执行其工作,生成响应。然后,响应以相同的方式返回 - 通过传输媒介进行序列化消息 - 到客户端。

WCF是一个通用的基于消息的通信系统,使您能够创建分布式系统 - 在您的服务器上有一堆服务,它们在客户端调用时提供执行某些功能的服务。WCF有点像Web服务 - 只不过比那还要多得多。它还是消息队列(使用Microsoft的MSMQ产品)、net/TCP通信等等。而且比以前任何通信API都更具可扩展性。


没有恒定的连接,WCF运行时将实例化您的服务类的一个实例来处理该请求。因此,如果我在类中有成员,它将被序列化并与其余参数一起发送。我假设默认和最常见的传输媒介是使用TCP套接字。是否有类似于HTTP的keep-alive?如果我必须连续发送2个或更多消息(无法作为1个消息发送),那么速度可能会变慢吗? - user34537
你说得对,它并不是一个RPC系统。非常好的一点是,我没有具体说明。有些双重绑定提供了其他地方难以获得的东西,比如Peer-2-Peer和Dual SOAP绑定。正如你指出的那样,它也非常可扩展,允许你使用任何你想要的方法创建自己的绑定。 - Ryan from Denver
1
@acidzombie24:WCF支持HTTP、NetTCP、MSMQ、UDP、SMTP以及其他大量传输方式,而且你也可以创建自己的传输方式。不,没有“保持连接”这种概念——这完全违背了整个理念:你只需要调用服务,它就会处理请求。没有状态,没有持续连接,没有“保持连接”或“检查是否存活”的功能——只有纯粹的消息传递。 - marc_s
有趣。现在唯一让我困惑的是返回值 :|。难道不必等待响应才能返回吗?如果是 SMTP,难道不可能需要几个小时(而不是失败/异常)吗?代码会被锁定吗? - user34537
2
@acidzombie24:如果你正在使用SMTP,你可能需要异步调用(不要等待答案返回),或单向调用(只发送-不等待响应)。 - marc_s
有趣,我以前没用过,所以不知道你可以发送而不必等待响应。很酷。你完全回答了我的问题。 - user34537

3

WCF实际上只是一个网络/通信平台,您可以根据自己的要求和技能使用它。通常在客户端 -> 服务器或n层应用程序的情况下使用。最常见的情况是由IIS或进程托管服务在服务器上托管,然后由某些客户端连接。

WCF确实具有传输数据的能力,包括将图像作为字节流传输等,这可能是您所暗示的内容。您也正确指出不应传递句柄,因为您通常会跨越许多边界(上下文、应用程序域、机器,甚至域/网络)连接应用程序。

不确定您想了解什么,但希望这有所帮助。


这非常有帮助。因此,这实际上是一种在远程服务器上调用远程函数的方法,通常不是由本地机器上的应用程序调用代码。这很有道理。 - user34537
那么,WCF解决了什么问题?在没有WCF的情况下,您不能做什么,比如在.NET 2.0中? - Prabhu
也许可以通过消息应用程序来通知歌曲已更改。或者编写代码通过Windows消息与Winamp通信。(我看到键盘记录器通过允许/cmd表示某些在大多数游戏中不会向其他人打印的内容来实现此目的。)即使现在,我仍然不明白如何在不插入Win32的情况下实现全局内存。 - user34537
@prabhu:在.NET 2.0中什么都没有,因为WCF只在.NET 3.0中引入......WCF是ASMX Web服务、.NET远程处理、WSE 3.0扩展、消息队列等的“下一代”。这些都已经可用 - 但每个都有自己的风格、API和限制。WCF将它们统一到一个共同且高度可配置的编程模型下。 - marc_s

1
  • WCF是ASMX Web服务和.NET Remoting的替代品
  • WCF是一种基于消息的通信平台
  • WCF是建立和消费各种Web服务的推荐Microsoft平台
  • WCF不仅限于HTTP/HTTPS或在IIS中托管。可以在任何进程中托管WCF服务
  • WCF开发人员中心是一个很好的起点,或者可以参考初学者指南

请阅读@marc_s的答案,他在第二行说“WCF根本不是远程函数调用。”而你说它是.net remoting的替代品,后者是方法的远程调用。那么你们两个怎么都正确呢? - Deepak Sharma
@DeepakSharma:它取代了.NET Remoting成为高性能进程间通信的技术。它可以在不需要RPC范式的情况下执行此功能。 - John Saunders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接