まず、私の設定は次のとおりです。
- .Net 4.0 ASP.Net アプリケーション
- basicHttpBinding (soap 1.1) を使用した WCF サービス
- 参照クラスは、オプション /useSerializerForFaults; を指定して svcutil を使用して生成されました。WSDL はすべての操作を定義し、types.xsd および types_fault.xsd ファイルへのリンクを提供します。参考までに、WSD ファイルと XSD ファイルは多くのアプリケーションで共通であるため、変更することはできません (もちろん、重大な検証エラーがない限り)。
SOAP エラーをクライアントに送信すると、問題が発生します。エラーの詳細について、コード内の正しいタイプにアクセスできないため、クライアントはこのエラーを処理できません。
以下は、理解を深めるための WSDL の抜粋です。
<wsdl:message name="CreateScheduledWorkRequest">
<wsdl:part name="parameters" element="root:CreateScheduledWork"/>
</wsdl:message>
<wsdl:message name="CreateScheduledWorkResponse">
<wsdl:part name="parameters" element="root:CreateScheduledWorkResponse"/>
</wsdl:message>
<wsdl:message name="CreateScheduledWorkFault">
<wsdl:part name="parameters" element="root:CreateScheduledWorkFault"/>
</wsdl:message>
<wsdl:portType name="ManageScheduledWorkScheduledWorkManagement">
<wsdl:operation name="CreateScheduledWork">
<wsdl:input name="CreateScheduledWorkRequest" message="intf:CreateScheduledWorkRequest"/>
<wsdl:output name="CreateScheduledWorkResponse" message="intf:CreateScheduledWorkResponse"/>
<wsdl:fault name="CreateScheduledWorkFault" message="intf:CreateScheduledWorkFault"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ManageScheduledWorkScheduledWorkManagementBinding" type="intf:ManageScheduledWorkScheduledWorkManagement">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="CreateScheduledWork">
<wsdlsoap:operation soapAction="http://www.orange.com/MACHX/Interfaces/ManageScheduledWork/ScheduledWorkManagement/v1/CreateScheduledWork"/>
<wsdl:input name="CreateScheduledWorkRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="CreateScheduledWorkResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="CreateScheduledWorkFault">
<wsdlsoap:fault name="CreateScheduledWorkFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
したがって、たとえば、Responseを返信する(エラーは発生していない) 場合、CreateScheduledWorkResponse要素を使用して正しく入力できます。しかし、FaultExceptionが発生した場合、CreateScheduledWorkFaultMessage を返すことしかできません ( CreateScheduledWorkFaultを返すことはできません)。そして、クライアントはこのタグを処理できません...
つまり、CreateScheduledWorkFault 型はコードで使用できません。
--> svcutil を使用して WSDL および XSD からコードを生成するときに、コード内の目的の型にアクセスできないため、何か問題があると思われます。
私はこのようにsvcutilを使用します:
svcutil /useSerializerForFaults CSW.wsdl CSW.xsd CSW_Fault.xsd
ご協力いただきありがとうございます。詳細が必要な場合は、お気軽にお問い合わせください。
ボリス