WCF+ウェブサービス:2つのフィールドが生成され、1つの整数を表す

StackOverflow https://stackoverflow.com/questions/4649788

質問

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

1つの整数パラメーターの代わりに、2:Integer(for value)とbool(Mark 'の場合は、値が指定されている場合)を持っていることがわかります。

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

どうもありがとう!

役に立ちましたか?

解決

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

「指定された」フィールドはオプションのパラメーターでのみ生成されるため、PublishEnrollmentProfileメソッドのパラメーターをデータコントラクトの内側に配置し、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;
    }

    .
    .
    .

} 

したがって、フィールドSiteNameとMethodIDを持つWCFサービスに渡す「要求」オブジェクトがあります。 MethodIDが必要になった例では、これが「指定された」フィールドを排除します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top