[英]WCF SOAP Fault incorrect type
首先,这是我的设置:
我的问题是当我向客户端发送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.