为什么我的wcf Web服务引用中有额外的参数?

时间:2009-06-15 18:17:07

标签: c# wcf web-services

我正在尝试将ASP.Net Web服务转换为WCF应用程序。客户端在.Net Compact Framework上,它不支持WCF,所以我需要确保WCF继续支持ASP样式的web服务。当我在Visual Studio中添加Web服务引用时,生成的代理类'方法有额外的参数。

例如,如果方法定义为:

public void GetEmpInfo(int empNo)

该方法将在代理类中显示为:

public void GetEmpInfo(int empNo, bool empNoSpecified)

导致这种情况的原因是什么?如何让它停止?

3 个答案:

答案 0 :(得分:8)

查看此blog post ...

  

这些额外的布尔值在哪里   “指定的”成员来自和什么   他们做了吗?答案是架构   那个WCF数据契约序列化器   默认情况下生成。因为   它的版本模型工作的方式,   serializer生成所有数据成员   作为可选元素。旧的网络   服务堆栈,ASP.NET Web服务   (“ASMX”),使用不同的序列化器,   维护的XmlSerializer   完整的架构和XML保真度。该   XmlSerializer映射所有可选项   元素分为两个成员:一个   代表数据本身,一个   指定数据是否为   实际存在 - 这是   “xxxSpecified”成员。这些   xxx指定的成员必须设置为   如果为true,则启用序列化   相应的“实际数据”   成员。

答案 1 :(得分:1)

.NET Compact Framework确实支持WCF的子集。您可以在MSDN上查看此支持。看一下,它可能足以支持您删除旧的Web服务支持。

答案 2 :(得分:0)

对于默认值为not null的类型,会发生这种情况。在这些情况下,Web服务无法知道参数是设置为默认值还是根本不设置。

您可以通过使用[XmlSerializerFormat]属性修改操作来消除额外的规范参数,如:

    [OperationContract]
    [XmlSerializerFormat]
    string GetEmpInfo(int? empNo);

此属性也可以在类级别添加,这在大多数情况下都有意义。

我知道你可以使用可空类型(int?)来处理这种情况,但是我无法使用它修复它。