9

[DataMember(IsRequired=true)]DataContractプロパティを必須にするために使用します。OperationContractパラメーターにIsRequiredがいくつかないようです。それらを必須にし、nullを許可しないようにするにはどうすればよいですか?

OperationContractのパラメータは、SoapUIツールではオプションのようです。ただし、これはオプションまたはnullであってはなりません。

WCFインターフェース:

[OperationContract]
IsClientUpdateRequiredResult IsClientUpdateRequired(IsClientUpdateRequiredInput versie);

...

[DataContract]
public class IsClientUpdateRequiredInput
{
    [DataMember(IsRequired=true)]
    public string clientName { get; set; }
    [DataMember(IsRequired = true, Order = 0)]
    public int major { get; set; }
    [DataMember(IsRequired = true, Order = 1)]
    public int minor { get; set; }
    [DataMember(IsRequired = true, Order = 2)]
    public int build { get; set; }
    [DataMember(IsRequired = true, Order = 3)]
    public int revision { get; set; }
}

soapUIリクエストテンプレート:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/" xmlns:pir="http://schemas.datacontract.org/2004/07/PirIS.Web.WCF.InputClasses">
   <soap:Header/>
   <soap:Body>
      <tem:IsClientUpdateRequired>
         <!--Optional:-->
         <tem:versie>
            <pir:clientName>?</pir:clientName>
            <pir:major>?</pir:major>
            <pir:minor>?</pir:minor>
            <pir:build>?</pir:build>
            <pir:revision>?</pir:revision>
         </tem:versie>
      </tem:IsClientUpdateRequired>
   </soap:Body>
</soap:Envelope>
4

2 に答える 2

4

残念ながら、デフォルトのWCFを使用して実行することはできません。いくつかの回避策があります。

ただし、FaultContractを実装して、入力パラメーターがnullの場合にフォールトをスローすることはできます。

于 2012-10-11T11:28:40.000 に答える
1

いいえ。通常のメソッドと同様に、参照型パラメーターに値があるかどうかを確認する必要がありますnull

プロパティにアクセスする前に参照型をチェックして、通常の防御プログラミングパターンを適用するだけです。

于 2012-10-11T11:27:13.230 に答える