Web services WCF&x2B;WebService:生成2个字段以表示1个整数
在我的WCF服务中,我有一个参数为“int”的方法:Web services WCF&x2B;WebService:生成2个字段以表示1个整数,web-services,wcf,wcfserviceclient,Web Services,Wcf,Wcfserviceclient,在我的WCF服务中,我有一个参数为“int”的方法: [OperationContract] PublishResult PublishEnrollmentProfile( string siteName, int methodId,... ); 当我创建此WCF服务的WebService引用时,生成了以下签名: [System.Web.Services.Protocols.SoapDocumentMethodAttribute("...
[OperationContract]
PublishResult PublishEnrollmentProfile(
string siteName, int methodId,...
);
当我创建此WCF服务的WebService引用时,生成了以下签名:
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("...",
RequestNamespace="...", ResponseNamespace="...",
Use=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public PublishResult PublishEnrollmentProfile(
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
string siteName,
int methodId,
[System.Xml.Serialization.XmlIgnoreAttribute()]
bool methodIdSpecified, ...)
{
object[] results = this.Invoke("PublishEnrollmentProfile", new object[] {
siteName,
deployServerName,
methodId,
methodIdSpecified,
deviceClass,
deviceName,
registrationCode});
return ((PublishResult)(results[0]));
}
您可以看到,我得到的不是一个整数参数,而是2:integer(表示值)和bool(表示标记'if value's specified)
这样行吗?为什么我需要第二个参数(bool)
非常感谢 Specified“字段仅在结构(int、datetime、decimal等)的可选参数上生成。所有此类变量都将生成具有指定名称的附加变量
由于“指定”字段仅在可选参数上生成,因此如果将PublishinerRollmentProfile方法的参数放置在DataContract中,并将methodID上的DataMember属性设置为[DataMember(IsRequired=true)]指定的字段应该消失,除非这是一个可选字段,在这种情况下,您希望保持原样
这是一本附有一些样品的书
更新
所以你有你的运营合同
[OperationContract]
PublishResult PublishEnrollmentProfile(string siteName, int methodId,...);
如果该方法的参数不是可选的,则应创建DataContract并重新定义OperationContract,如下所示:
{
[OperationContract]
PublishResult PublishEnrollmentProfile(PublishEnrollmentProfileRequest request);
}
然后你就有了这样的数据合同
[DataContract]
public class PublishEnrollmentProfileRequest
{
private string _siteName;
[DataMember]
public string siteName
{
get;
set;
}
private int _methodId;
[DataMember(IsRequired=True)]
public int methodId
{
get;
set;
}
.
.
.
}
因此,您将有一个“请求”对象传递到WCF服务中,该服务具有字段siteName和methodId。在我提供的示例中,methodId现在是必需的,这将删除“指定”字段。指定”字段仅在结构的可选参数上生成。(int、datetime、decimal等)。所有这些变量都将生成具有指定名称的附加变量
由于“指定”字段仅在可选参数上生成,如果将PublishinerRollmentProfile方法的参数放置在DataContract中,并将methodID上的DataMember属性设置为[DataMember(IsRequired=true)],则指定字段应消失,除非这是一个可选字段,在这种情况下,您希望保持原样
这是一本附有一些样品的书
更新
所以你有你的运营合同
[OperationContract]
PublishResult PublishEnrollmentProfile(string siteName, int methodId,...);
如果该方法的参数不是可选的,则应创建DataContract并重新定义OperationContract,如下所示:
{
[OperationContract]
PublishResult PublishEnrollmentProfile(PublishEnrollmentProfileRequest request);
}
然后你就有了这样的数据合同
[DataContract]
public class PublishEnrollmentProfileRequest
{
private string _siteName;
[DataMember]
public string siteName
{
get;
set;
}
private int _methodId;
[DataMember(IsRequired=True)]
public int methodId
{
get;
set;
}
.
.
.
}
因此,您有一个“请求”对象,可以将其传递到WCF服务中,该服务具有字段siteName和methodId。在我提供的示例中,methodId现在是必需的,这将删除“Specified”字段。对不起,我说的是方法本身的参数。它还需要其他属性吗?我在“int methodId”之前添加了“[DataMember(IsRequired=true)],并出现以下错误:属性“DataMember”对此声明类型无效。它只对“属性、索引器、字段”声明有效。前面的响应中提供了一个示例。现在我已经得到了它。谢谢!对不起,我说的是方法本身的参数。它还需要其他属性吗?我在“int methodId”之前添加了“[DataMember(IsRequired=true)],并出现以下错误:属性“DataMember”对此声明类型无效。它只对“属性、索引器、字段”声明有效。前面的响应中提供了一个示例。现在我已经得到了它。谢谢!另见。这是正常的和预期的。另请参阅。这是正常的,也是意料之中的。