Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services WCF&x2B;WebService:生成2个字段以表示1个整数_Web Services_Wcf_Wcfserviceclient - Fatal编程技术网

Web services WCF&x2B;WebService:生成2个字段以表示1个整数

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("...

在我的WCF服务中,我有一个参数为“int”的方法:

    [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”对此声明类型无效。它只对“属性、索引器、字段”声明有效。前面的响应中提供了一个示例。现在我已经得到了它。谢谢!另见。这是正常的和预期的。另请参阅。这是正常的,也是意料之中的。