首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF Webservices和FaultContract客户端接收FaultException<TDetails>的SoapExc实例

WCF Webservices和FaultContract客户端接收FaultException<TDetails>的SoapExc实例
EN

Stack Overflow用户
提问于 2010-04-15 17:49:09
回答 1查看 2K关注 0票数 0

我正在开发一个WCF Webservice并在mvc2应用程序中使用它。我的问题是,我在我的方法上使用了带有自定义FaultDetail的FaultContracts,我抛出了很多faultexception,但是当客户端收到异常时,它会收到一个普通的SoapException,而不是我从服务端抛出的FaultException。

下面是一些代码:

自定义故障详细信息类:

代码语言:javascript
复制
[DataContract]
public class MyFaultDetails
{
[DataMember]
public string Message { get; set; }
}

服务合同操作:

代码语言:javascript
复制
[OperationContract]
[FaultContract(typeof(MyFaultDetails))]
void ThrowException();

实施:

代码语言:javascript
复制
public void ThrowException()
{
var details = new MyFaultDetails { Message = "Exception Test" };
throw new FaultException<MyFaultDetails >(details , new FaultReason(details .Message), new FaultCode("MyFault"));
}

客户端:

代码语言:javascript
复制
try
{
// Obv proxy init etc..
service.ThrowException();
}
catch (FaultException<MyFaultDetails> ex)
{
// stuff
}
catch (Exception ex)
{
// stuff
}

我所期望的是捕获FaultException,而不是跳过该捕获,并使用SoapException类型的异常获取下一个捕获。

我是不是漏掉了什么?

我写了很多关于在wcf中使用faultcontracts的帖子,我所做的似乎是很好的。我查看了生成的wsdl和xsd,它们看起来都很好。下面是关于这个方法的一个片段:

代码语言:javascript
复制
 <wsdl:operation name="ThrowException">
      <wsdl:input wsaw:Action="http://tempuri.org/IAnyJobService/ThrowException" message="tns:IAnyJobService_ThrowException_InputMessage" />
      <wsdl:output wsaw:Action="http://tempuri.org/IAnyJobService/ThrowExceptionResponse" message="tns:IAnyJobService_ThrowException_OutputMessage" />
      <wsdl:fault wsaw:Action="http://tempuri.org/IAnyJobService/ThrowExceptionMyFaultDetailsFault" name="MyFaultDetailsFault" message="tns:IAnyJobService_ThrowException_MyFaultDetailsFault_FaultMessage" />
    </wsdl:operation>

<wsdl:operation name="ThrowException">
      <soap:operation soapAction="http://tempuri.org/IAnyJobService/ThrowException" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
      <wsdl:fault name="MyFaultDetailsFault">
        <soap:fault use="literal" name="MyFaultDetailsFault" namespace="" />
      </wsdl:fault>
    </wsdl:operation>

有什么帮助吗?

提前感谢

问候

Alessandro

EN

回答 1

Stack Overflow用户

发布于 2010-04-15 19:32:55

好了,伙计们,我自己解决。就像我说的,一切都是对的。我只是使用了错误的httpBinding (basic而不是ws)。如果你不使用wsHttpBinding,那么所有漂亮的FaultContract机制都无法工作。

完全谢谢你

问候

Alessandro

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2644232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档