c# - 为什么客户端不能与WCF服务器直接对话(!),而不是使用这样做的代理类?

标签 c# .net wcf client-server

我目前正在学习WCF的基础知识,无意中发现了以下流程:
enter image description here
这意味着我的客户机需要与一个代理类进行通信,该代理类与wcf服务器进行通信。
为什么我(客户机)不能直接与服务器对话,而不是使用第三方进行工作?

最佳答案

没有什么能阻止您不使用c wcf代理客户端与wcf服务进行通信,您总是可以不使用并使用原始tcp/http/pipes/msmq。然而,这样做通常需要花费大量的精力和时间,在这期间,大多数人通常更愿意花时间阅读银河系的《搭便车者指南》。
重吗?
WCF代理实际上并不像听起来那么沉重。他们也不是真正的“第三方”。一般来说,没有什么比用应用程序编译的轻量级类更重要的了。它们不会像某些COM场景中可能发生的那样运行say out-of-process。
“第三方”代理的概念并不是wcf独有的。DCOM也有代理的概念,但不同于WCF,它们是为您创建的幕后,是无法避免的。有时,如前所述,它们甚至在另一个进程中运行!WCF,或者我应该说SOAP服务(一般)不同于DCOM,因为不需要客户端代理。它们只是使使用soap服务的用例更容易。幸运的是,部分windows不得不为超空间旁路让路,因此在现代应用程序中使用dcom基本上已经不复存在。
客户端代理帮助您的生活:
将方法调用封装并序列化为请求消息(通常是soap)
当对服务的调用从上一步发送请求消息时,从底层传输中提取您。即使用TCP;HTTP;MSMQ等API。希望TCP WCF服务接受本地命名管道客户端?只需简单地更改配置文件,一般不需要更改代码!
将响应消息反序列化为用户友好的c对象
以安全令牌的形式为您处理所有繁琐、复杂和必要的安全;cookies等
什么时候WCF不是WCF?
所以再回到你的问题:
为什么客户不能直接说话(!)使用wcf服务器,而不是使用代理类?
当您考虑WCF将所有的COM API统一为单个API时,抽象和封装SOAP服务,那么我们可以说,所有WCF客户端根据定义使用WCF代理来与WCF服务进行对话。
只要客户机在代码中显式地使用原始的tcp;msmq;http;命名管道api,它就基本上不再是wcf客户机(记住wcf完全是关于统一通信的),而是成为soap客户机(或者可能是rest)。我甚至认为,将IRequestChannel接口与其Request()方法一起使用,会引入一个消息传递概念,这在标准wcf客户端代理代码中并不明显(即使它仍然从用户抽象传输)。作为比较,如果我使用应用程序的wcf配置将msmq绑定添加到纯wcf客户端代理,则我的代码通常不会采用通常与msmq关联的异步消息传递模型。这就是WCF的好处。
当然,用wcf编写的服务器将非常满足于它认为自己是“wcf”的知识,而不管客户是否认为它是wcf;soap或一些可怕的xml负载是通过tcp发送的,其方式与冥王星神一样,认为自己是一个行星,无论什么分类系统恰好在当时流行。
如果您想将服务视为WCF服务,请使用WCF客户端代理(因为我们一般不关心发送的底层SOAP消息)。
如果你想直接与服务无关的代理,那么你应该考虑作为SOAP服务的远程服务,因此武装自己不仅低级别的COM API,而且如何构建和处理SOAP消息
是否建议使用非代理方法?
虽然您可以不使用代理,但不建议这样做,因为如果您想要更改安全性、传输、最大消息长度、json等协议、addasync方法,则需要使用应用程序对非代理执行大量代码更改(与代理方法相比)。
就像星际之心的黄金,WCF是“很高兴能为您服务”,但理解您是否需要手动舵控制。
免费参考道格拉斯·亚当的优秀广播剧;电视迷你系列和书籍《银河系漫游指南》。为什么不按一下“不要惊慌”按钮,今天就看呢?

关于c# - 为什么客户端不能与WCF服务器直接对话(!),而不是使用这样做的代理类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33448274/

相关文章:

C# HTML 类库?

.net - Windows DPAPI - 如何处理熵?

c# - WCF 无法使用无线建立到笔记本电脑

wcf - 如何使用 SvcUtil.exe 在不覆盖服务配置名称的情况下设置命名空间?

c# - 为什么 cpu 性能计数器一直报告 0% cpu 使用率?

c# - System.Collections 是 "namespace of the System namespace"吗?

c++ - 无效部署异常

c# - Visual Studio - 项目显示为 "Miscellaneous Files"

c# - 如何使用 WCF 使用 PHP SOAP 服务

c# - 以编程方式确定路径是否受限