これは、手続き型の方法でメソッドを設計する場合、入力パラメーターはすべてデフォルトでオプションであり、明示的に指定しない場合はデフォルト値が入力されるということです。次のシグネチャを持つメソッドがあるとします。
[OperationContract]
void TestMethod(string param1, int param2);
次の WSDL を取得します。
<xs:element name="TestMethod">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="param1" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="param2" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
ご覧のとおり、minOccurs 属性の値は 0 です。これは、要素がオプションであることを意味します。したがって、新しいパラメーターを追加した後でもメソッドが機能することは驚くことではありません。
この動作を回避したい場合は、MessageContract を使用するか、少なくともすべてのパラメーターをコンテナー クラスにラップして、メッセージの方法でコントラクトを設計してみてください。また、必要なパラメーターを明示的に指定し、DataMember 属性を介してデフォルト値を許可するかどうかを指定します。
それが役に立てば幸い!