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

    [OperationContract]
    PublishResult PublishEnrollmentProfile(
        string siteName, int methodId,...
        );

当我创建对此WCF服务的Web服务引用时,生成了以下签名:

    [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(for value)和bool(如果指定了值,则标记')。

这个可以吗?为什么我需要第二个参数(bool)?

非常感谢!

有帮助吗?

解决方案

指定的“字段仅在构造的可选参数上生成。(int,dateTime,十进制等)。所有这些变量都将在指定的名称中生成其他变量。

由于仅在可选参数上生成“指定”字段,因此,如果将publishenrollmentProfile方法放置在数据合同内部的publishenRollmentProfile方法并将dataMember属性设置为[datamember(isrequired = true)],则指定的字段应消失,除非这是一个可选的字段,在这种情况下,您希望将其保留。

这是一个 博客帖子 有一些样本。

更新

因此,您有运营合同。

[OperationContract]
PublishResult PublishEnrollmentProfile(string siteName, int methodId,...);

如果该方法的参数不是可选的,则应创建一个数据合同并重新定义“合同”类似:

{
   [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;
    }

    .
    .
    .

} 

因此,您有一个“请求”对象,该对象传递到具有字段名称和MethodID的WCF服务中。在我提供的示例中,现在需要MethodID,这将弹出“指定”字段。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top