0

私の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]));
    }

1つの整数パラメーターの代わりに、2:整数(値の場合)とbool(値が指定されている場合はマーク'の場合)があることがわかります。

これでいい?2番目のパラメーター(bool)が必要なのはなぜですか?

どうもありがとう!

4

1 に答える 1

3

「指定された」フィールドは、構造体であるオプションのパラメーター(int、datetime、decimalなど)でのみ生成されます。このようなすべての変数には、Specifiedという名前で生成された追加の変数があります。

「指定」フィールドはオプションのパラメーターでのみ生成されるため、PublishEnrollmentProfileメソッドのパラメーターをDataContract内に配置し、methodIDのDataMember属性を[DataMember(IsRequired = true)]に設定すると、指定されたフィールドは削除されます。これはオプションのフィールドであり、その場合はそのままにしておきます。

これがいくつかのサンプルを含むブログ投稿です。

アップデート

つまり、運用契約があります。

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

そのメソッドのパラメーターがオプションでない場合は、DataContractを作成し、次のようにOperationContractを再定義する必要があります。

{
   [OperationContract]
   PublishResult PublishEnrollmentProfile(PublishEnrollmentProfileRequest request);
}

そして、あなたはこのようなあなたのDataContractを持っています。

[DataContract]
public class PublishEnrollmentProfileRequest
{
    private string _siteName;
    [DataMember]
    public string siteName
    {
       get;
       set;
    }


    private int _methodId;
    [DataMember(IsRequired=True)]
    public int methodId
    {
       get;
       set;
    }

    .
    .
    .

} 

したがって、siteNameフィールドとmethodIdフィールドを持つWCFサービスに渡す「request」オブジェクトがあります。私が提供した例では、methodIdが必須になりました。これにより、「Specified」フィールドが削除されます。

于 2011-01-10T18:31:29.993 に答える