gpt4 book ai didi

c# - WCF是建立在套接字上的吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:25 26 4
gpt4 key购买 nike

我正在尝试更详细地了解使用套接字进行编程,而不仅仅是使用API​​调用。我对使用C++中的WinSocks进行C#WCF和套接字编程有相当的了解。现在我有两个主要问题:

  • 在所有情况下,WCF是否都在内部使用套接字进行通信。换句话说,WCF是套接字周围的包装器吗?
  • 是否所有类型的基于网络的通信都在最后使用套接字来发送/接收数据,这是OSI模型所要求的?

  • 稍微详细的解释将比仅是/否答案更好。

    最佳答案

    (向同意重新打开此问题的其他SO用户致谢)。
    作为开场白,请记住这是2019 2020,而 WCF已过时,我个人很高兴看到它消失了,我强烈建议您不要在任何新项目中使用WCF,我建议人们尽快从WCF过渡。可能的。
    现在,针对您的问题(我的粗体强调):

    Does WCF use sockets internally for the communication in all cases. In other words is WCF a wrapper around sockets and is built upon them?


    严格来说, (但在实际意义上,对于机器间传输,是)。

    WCF是与“消息处理”有关的.NET平台。 WCF试图抽象出消息传输的底层细节(但是它是如此可怕,所以今天没有人应该使用它),因此完全有可能构建一个WCF应用程序来实现机器间和网络间的通信而无需既可以使用Windows的Winsock,也可以使用给定计算平台使用的任何“套接字”式API。
    现在,虽然表面上WCF完全是关于抽象的,但实际上WCF是针对SOAP消息而设计的(SOAP也很可怕,但这是另一个讨论),并且SOAP主要使用HTTP作为消息传输-HTTP主要使用TCP/IP,并且Microsoft Windows上几乎每个单独的TCP/IP应用程序都将在进程的通信堆栈中的某个位置使用Winsock API。 (可以说Windows上的HTTP应用程序将使用 http.sys,它在内核模式下执行HTTP请求/响应处理,这必然意味着绕过Windows的用户模式Winsock API,而 http.sys使用“ Winsock Kernel”这是它自己的东西)。
    在上一段中,请注意使用“主要”一词(与“排他性”或“始终”相对)-因为:
  • WCF不必使用SOAP,它可以使用其他消息传递模型/协议(protocol)/范例,例如 net.tcp (其本身更像是“二进制SOAP”)或什至是REST(尽管REST支持在WCF的生命周期中来得很晚)难以正确配置,YMMV)。
  • SOAP不必使用HTTP,它可以使用其他传输方式,例如SMTP。 And WCF expressly supports other SOAP's other main transports like SMTP and FTP
  • 虽然HTTP有效地绑定(bind)到TCP/IP,而Winsock是用户模式应用程序使用TCP/IP的唯一真实方法,但是其他传输(例如SMTP)不必使用TCP/IP(至少,不是您使用的方式)思考-请参阅我的脚注)。
  • 当然,在所有这些过程中-用户模式应用程序始终可以自由使用Winsock或BSD套接字之外的其他网络编程接口(interface)(例如,Windows的命名管道提供了流式IPC接口(interface),就像TCP的行为一样-或网络接口(interface)卡的供应商可以拥有自己的专有网络API,这在某种程度上比套接字API更好(类似于1990年代中期的GPU供应商推销自己的API的方式(Glide,PowerVR,Rendition等)直到他们都不得不支持Direct3D和OpenGL(以及谁使用Metal了?)。
  • 虽然WCF在设计时并未考虑到可测试性,但仍可以在集成测试环境中托管和运行WCF应用程序,在该环境中,实际的消息传输只是一个瘦代理对象,或者是伪造的或模拟的实现-因此在那里也完全避免使用套接字。

  • 但是在实践中-在Win32中,联网是使用Winsock(Microsoft对BSD Sockets API的实现)完成的,因此,如果您使用WCF在机器之间进行通信,那么我可以肯定地说99%最终您的消息将通过Winsock。
    脚注:关于在不使用套接字的情况下将WCF与SMTP一起使用:许多SMTP电子邮件服务器(包括Microsoft Exchange Server)都支持“ pickup directories”-电子邮件服务器主动监视的文件系统目录,该文件系统目录可检测何时有新文件包含已添加到该文件夹​​中,并以SMTP信封的形式读取每个文件,并以与服务器SMTP服务终结点接收到的SMTP信封相同的方式对其进行处理-如果要将SOAP-in-SMTP消息“放入”内部,取件目录,并且该目录是发往取件目录的电子邮件服务本地的收件人的,则该消息也将完全不会通过Winsock传递。

    关于c# - WCF是建立在套接字上的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59456579/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com