繁体   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