【发布时间】:2009-07-26 10:38:13
【问题描述】:
我正在使用 VSTS 2008 + .Net 3.5 + C# 开发 WCF 服务,当我还使用 VSTS 2008 开发客户端时它工作正常(使用添加服务引用功能自动生成客户端 Web 服务代理代码)。我开发的 WCF 使用的是 basicHttpBinding。
我遇到的问题是,当我使用 Visual Studio.Net (Visual Studio 2003) 生成客户端 Web 服务代理代码时,OperationContract 方法有一个额外的输入参数,称为 IdSpecified(bool 类型)。我已经测试过,当将 IdSpecified 指定为 true 时,Id 参数的值将正确传递给 WCF 服务器端,但是当我将 IdSpecified 指定为 false 时,无论我为 Id 参数指定什么值,在 WCF 服务器端,Id 都会是始终为0。我也尝试过输入参数类型,如字符串,客户端没有这样的额外输入参数。
我的问题是为什么有一个额外的参数?它的含义是什么,是否可以避免生成这样的附加参数?
这是 Visual Studio.Net 自动生成的客户端 Web 服务代理代码,
public StudentInfo Poll(int Id, [System.Xml.Serialization.XmlIgnoreAttribute()] bool IdSpecified)
这是我的 VSTS 2008 WCF 服务器端代码,
[OperationContract]
StudentInfo Poll(int Id);
编辑 1:这是客户端自动生成的有关 Poll 方法的代码的一部分。
[return: System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public StudentInfo Poll(int Id, [System.Xml.Serialization.XmlIgnoreAttribute()] bool IdSpecified) {
object[] results = this.Invoke("Poll", new object[] {
Id,
IdSpecified});
return ((StudentInfo)(results[0]));
}
【问题讨论】:
-
here 是关于它的博客
-
嗨,ArsenMkrt,博客看起来非常棒,但与我在这里提到的问题不同。在博客中,自动生成的客户端代理代码似乎包含一个名为 IdSpecified 的属性,但在我的场景中,没有这样的属性,只是 Poll 方法的一个附加参数。您可以在我的原始帖子的 EDIT 1 部分看到我更新的代码。我的问题有什么解决方案吗?
-
乔治,同样的事情。添加了一个额外的参数,因为 int 是一个参数,而不是一个属性。如果您传递一个具有单个 int 属性的类,您会看到一个单独的 IdSpecified 属性。
-
约翰的评论太棒了!
标签: c# .net wcf web-services asmx