c# – 为什么客户端不能直接(!)与WCF服务器通话,而不是使用代理类来执行此操作?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 为什么客户端不能直接(!)与WCF服务器通话,而不是使用代理类来执行此操作?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2724字,纯文字阅读大概需要4分钟。
内容图文
![c# – 为什么客户端不能直接(!)与WCF服务器通话,而不是使用代理类来执行此操作?](/upload/InfoBanner/zyjiaocheng/819/d93b17b6d44c469e913f5d64f36f805e.jpg)
我目前正在学习WCF的基础知识,我偶然发现了以下流程:
这意味着我的客户端需要使用与WCF服务器通信的Proxy类.
为什么我(客户端)不能直接与服务器对话,而不是使用第三方来完成工作?
解决方法:
没有什么可以阻止您不使用c#WCF代理客户端与WCF服务进行通信,您可以随时使用,并使用原始TCP / HTTP /管道/ MSMQ.然而,这样做通常需要很多努力和时间 – 在此期间大多数人通常更愿意花时间阅读Hitchhiker的银河指南.
重?
WCF代理实际上没有听起来那么重.他们也不是真正的“第三方”.通常只有与您的应用程序一起编译的轻量级类别.在某些COM场景中,它们不会像在进程外那样运行.
“第三方”代理的概念并非WCF独有. DCOM也有代理的概念,但与WCF不同,它们是在幕后为您创建的,无法避免.有时,如上所述,他们甚至在另一个过程中运行! WCF,或者我应该说SOAP服务(通常)与DCOM不同,因为客户端代理不是必需的.它们只是简化了使用SOAP服务的用例.幸运的是,Windows的那部分必须为超空间旁路让路,因此在当代应用中使用DCOM基本上不再存在.
客户代理通过以下方式帮助您的生活:
>将方法调用封装并序列化为请求消息(通常为SOAP)
>当对服务的调用从前一步骤发送请求消息时,从底层传输中抽象出来.即使用TCP; HTTP; MSMQ等API.希望您的TCP WCF服务接受本地命名管道客户端?只需更改配置文件,通常不需要更改代码!
>将响应消息反序列化为用户友好的c#对象
>处理所有繁琐的;以安全令牌的形式为您提供复杂且必要的安全保障;饼干等
什么时候WCF不是WCF?
所以再回到你的问题:
Why can’t a client speak directly (!) with a WCF server , instead of using a proxy class that does that?
…当您考虑WCF将所有comms API统一到单个API中时;抽象并封装SOAP服务,然后我们可以说所有WCF客户端都按照定义使用WCF代理与WCF服务进行通信.
一旦客户端明确使用原始TCP; MSMQ; HTTP;在代码中命名管道API,它基本上不再是WCF客户端(记住WCF是关于统一通信的),而是成为SOAP客户端(或者可能是REST).我甚至认为使用IRequestChannel接口及其Request()方法会引入一种消息传递概念,这种概念在标准WCF客户端代理代码中并不明显(即使它仍然从用户抽象传输).通过比较,如果我将MSMQ绑定添加到我的纯WCF-client-proxy-using-app的WCF配置,我的代码通常不会采用通常与MSMQ相关联的异步消息传递模型.这是WCF的好处.
当然,用WCF编写的服务器将非常满足于它认为自己是“WCF”的知识,无论客户是否认为它是WCF;通过TCP拍摄的SOAP或一些可怕的XML有效载荷与冥王星的神灵大致相同,认为自己是一个行星,无论当时的分类系统是什么样的.
>如果要将服务视为WCF服务 – 请使用WCF客户端代理(因为我们通常不关心正在发送的基础SOAP消息)
>如果您想在没有代理的情况下直接与服务交谈,那么您应该将远程服务视为SOAP服务,因此不仅要使用低级别的通信API,还要考虑如何构造和处理SOAP消息.
是否建议使用非代理方法?
虽然你可以不使用代理,但不建议这样做,因为如果你想改变安全性,传输,最大消息长度,JSON等协议,添加异步方法,你需要对你的非执行大量代码更改. -proxy-using-app与代理方法相比.
就像星舰之心Heart of Gold一样,WCF“很高兴为您提供服务”,但是如果您想要手动掌舵控制,那就明白了.
毫无根据地提到道格拉斯·亚当的精彩广播剧;电视迷你系列和书籍银河系漫游指南.为什么不按下Do not Panic按钮并立即阅读?
内容总结
以上是互联网集市为您收集整理的c# – 为什么客户端不能直接(!)与WCF服务器通话,而不是使用代理类来执行此操作?全部内容,希望文章能够帮你解决c# – 为什么客户端不能直接(!)与WCF服务器通话,而不是使用代理类来执行此操作?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。