必要なメソッドパラメータ(minoccurs =“ 1”)を使用してWCFでWSDLを自動生成するにはどうすればよいですか?
質問
WCFとOperationContractsを使用しながら、次のメソッドを定義しています:
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(FaultException<ExceptionDetail>))]
int DoSomething(int someId, MyComplexType messageData);
これがWCFランタイムによってWSDLに変換されると、minoccurs =&quot; 0&quot;パラメーターsomeIdおよびmessageDataにリストされています(これらのパラメーターが欠落している場合、その後ランタイムエラーがスローされます)。
SoapUIを使用してプロキシを生成すると、次のようになります。
<com:DoSomething>
<!--Optional-->
<com:EventId>1</com:EventId>
<!--Optional-->
<com:myComplexType >
<com:id>1</com:id>
</com:myComplexType >
</com:DoSomething>
MyComplexTypeのidフィールドは、IsRequired =&quot; true&quot;を使用してDataMemeber属性でマークアップされます。したがって、必須として公開されます。
WSDLがパラメーターがオプションではない場合にオプションであることを指定することは明らかに誤解を招くかもしれませんが、OperationContractをマークアップしてWCFがこれらのパラメーターを必要に応じて認識および公開するようにする明らかな方法はありません。
これを行うための明白な方法がないように見えるので少し困惑しています(intellisense / msdn / googleを読んで)。または、私は盲目になり、明らかなものを見落とします。
手がかりはありますか
解決
ソースファイルをダウンロードする以外に、契約定義に属性を追加するだけです。そのように:
[ServiceContract]
[RequiredParametersBehavior]
public interface ICalculatorService
{
[OperationContract]
int Add(int firstValue, int secondValue);
}
これについて詳しく説明しているブログ投稿は次のとおりです。 WCFによるWSDL minOccursの制御
他のヒント
MyComplexTypeが[DataContract]属性でマークされていることを確認します。
自分のWCFコントラクトの場合、コントラクトに関連するオブジェクトのチェーン全体がそのようにマークされるまで、生成されたwsdlのIsRequired = trueに対してminOccurs = 1が表示されないことがわかりました。