将 WCF 服务添加为 Web 引用和服务引用时的不同代理类
Posted
技术标签:
【中文标题】将 WCF 服务添加为 Web 引用和服务引用时的不同代理类【英文标题】:Different proxy class when adding WCF service as web reference and service reference 【发布时间】:2011-09-05 06:56:36 【问题描述】:我添加了一个使用 WCF 编写的 Web 服务作为参考。当我将代理类生成器添加为服务引用时,它可以完美地工作,但是当我使用 service.svc?WSDL
将其添加为 Web 引用时,它会生成一个稍微不同的类。以下是区别:
//service reference
public partial class TestServicesClient : ... // correct class name
public int TestMethod(string serviceID, int dealID) // correct method signature
...
//web reference
public partial class TestServices: ... //different class name
public void TestMethod(string serviceID, int dealID, bool dealIDSpecified, out int TestMethodResult, out bool TestMethodResultSpecified) // different method signature
...
我尝试使用 wsdl.exe 生成 web 参考类,没有帮助。
这里有什么问题?
【问题讨论】:
【参考方案1】:这里没有错。 Service Reference
是使用 WCF 服务的“新”方式,它消除了诸如“指定”参数、“结果”参数和“结果指定”参数等开销。
您仍然可以使用其他属性/方法来检查是否指定了参数或是否有结果。但是在 WCF 之前,它改变了方法签名。
您使用服务引用和 Web 引用有点不同,这就是它的方式。
这里有一些额外的阅读:
Difference between web reference and service reference? The Difference Between “Add Web Reference” and “Add Service Reference”引用"What is the difference between WCF service and web service"的回复
WCF“网络服务”是很多 范围更广的远程 通过 WCF 启用通信。你 将获得更高的程度 灵活性和便携性 WCF 中的东西比通过传统的 ASMX 因为 WCF 是设计的,从 接地气,总结所有 不同的分布式编程 MS 提供的基础设施。一个 WCF 中的端点可以通信 与通过 SOAP/XML 一样容易 它可以通过 TCP/二进制文件进行更改 这个媒介只是一个配置 文件模组。从理论上讲,这可以减少 移植时需要的新代码量 或不断变化的业务需求、目标、 等等
ASMX 比 WCF 更老,而且任何东西 ASMX 可以做到,WCF 也可以(以及更多)。 基本上你可以看到 WCF 试图 在逻辑上将所有 获取两个应用程序的不同方法 在 MS 的世界中交流; ASMX 只是众多方式中的一种,所以 现在归入 WCF 保护伞 能力。
【讨论】:
谢谢。补充阅读:west-wind.com/weblog/posts/2007/Dec/13/…【参考方案2】:服务参考和网络参考之间几乎没有区别。 WCF 使用 datacontract 序列化程序进行序列化。因此,将 XmlSerializeFormat 属性添加到服务合同,然后添加 Web 引用。您的额外参数将被删除。但是它就像只使用类似 web 服务的 wcf。另一个限制是您只需要使用像 http 这样的 Web 绑定。
【讨论】:
以上是关于将 WCF 服务添加为 Web 引用和服务引用时的不同代理类的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 WCF 服务引用来使用 RPC 样式的 Web 服务?
将标志添加到枚举后:Wcf 错误:错误 5 自定义工具错误:无法为服务引用“MyService”生成代码