添加WCF服务作为Web引用和服务引用时的不同代理类

时间:2011-05-31 07:58:44

标签: c# .net wcf web-services

有一个用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引用类,没有帮助。

这里有什么问题?

2 个答案:

答案 0 :(得分:2)

这里没有错。 Service Reference是使用WCF服务的“新”方式,它消除了诸如“指定”参数,“结果”参数和“结果特定”参数之类的开销。

您仍然可以使用其他属性/方法来检查是否指定了参数或是否存在结果。但在WCF之前,它改变了方法签名。

您使用服务引用和Web引用有点不同,这就是它的方式。

这是一些额外的阅读:

引用对"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伞下   能力。

答案 1 :(得分:0)

服务引用和Web引用之间几乎没有区别。 WCF使用datacontract序列化程序进行序列化。因此,将XmlSerializeFormat属性添加到serivcecontract,然后添加Web引用。您的额外参数将被删除。但它就像使用像web服务这样的wcf。还有一个限制是你需要像http一样使用网页绑定。