簡體   English   中英

WCF SOAP故障類型不正確

[英]WCF SOAP Fault incorrect type

首先,這是我的設置:

  • .Net 4.0 ASP.Net應用程序
  • WCF服務,帶有basicHttpBinding(肥皂1.1)
  • 引用類是使用svcutil生成的,帶有/ useSerializerForFaults選項; WSDL定義了所有操作,並提供了指向types.xsd和types_fault.xsd文件的鏈接。 僅供參考,WSD和XSD文件在許多應用程序中很常見,因此我無法對其進行修改(除非存在一些主要的驗證錯誤)

我的問題是當我向客戶端發送SOAP Fault時:對於錯誤詳細信息,我無法訪問代碼中的正確類型,因此客戶端無法處理此錯誤。

以下是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>

因此,例如,當我發回響應 (沒有發生錯誤)時,可以使用CreateScheduledWorkResponse元素並正確填充它; 但是當出現FaultException時,我只能發送回CreateScheduledWorkFaultMessage (而不是CreateScheduledWorkFault)。 客戶端無法處理此標簽...

換句話說,CreateScheduledWorkFault類型在代碼中不可用。

->我懷疑使用svcutil從WSDL和XSD生成代碼時出了點問題 ,因為我無法訪問代碼中所需的類型。

我以這種方式使用svcutil:

svcutil / useSerializerForFaults CSW.wsdl CSW.xsd CSW_Fault.xsd

感謝您的幫助,如果您需要更多詳細信息,請不要猶豫。

鮑里斯

我的解決方案是直接修改生成的類中的類型……這很糟糕,但是在我的情況下,這是我唯一的選擇(通常,我永遠不要重新生成它,因為WSDL永遠不會改變)。

現在,我還有另一個問題,但是它與名稱空間有關,因此我將為此提出一個新問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM