首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >wcf FaultException原因

wcf FaultException原因
EN

Stack Overflow用户
提问于 2014-01-06 16:47:54
回答 2查看 4.1K关注 0票数 3

对于以下异常,未在异常窗口(->view详细信息)中指定原因:

此错误的创建者System.ServiceModel.FaultException没有指定原因。我怎么才能改变它来显示原因呢?(我需要1234显示在那里)

代码语言:javascript
运行
复制
public class MysFaultException
{
    public string Reason1
    {
        get;
        set;
    }
}

MyFaultException connEx = new MyFaultException();
connEx.Reason1 = "1234";
throw new FaultException<OrdersFaultException>(connEx);
EN

回答 2

Stack Overflow用户

发布于 2014-01-06 17:10:31

如果希望将所有异常转发给调用方,那么I3arnon答案是很好的,但是如果您只希望通过一组有限的已知故障,则可以创建故障契约,让调用方知道可能会出现一组特定的异常,以便客户端能够准备好处理它们。这允许您传递潜在的预期异常,而无需将您的软件可能抛给客户端的所有异常转发。

下面是MSDN中的一个简单示例,它显示一个WCF服务捕获一个DivideByZeroException并将其提交给一个FaultException,然后传递给客户端。

代码语言:javascript
运行
复制
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    //... (Snip) ...

    [OperationContract]
    [FaultContract(typeof(MathFault))]
    int Divide(int n1, int n2);
}

[DataContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public class MathFault
{    
    private string operation;
    private string problemType;

    [DataMember]
    public string Operation
    {
        get { return operation; }
        set { operation = value; }
    }

    [DataMember]        
    public string ProblemType
    {
        get { return problemType; }
        set { problemType = value; }
    }
}

//Server side function
public int Divide(int n1, int n2)
{
    try
    {
        return n1 / n2;
    }
    catch (DivideByZeroException)
    {
        MathFault mf = new MathFault();
        mf.operation = "division";
        mf.problemType = "divide by zero";
        throw new FaultException<MathFault>(mf);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2014-01-06 16:50:00

WCF服务选择不显示使用includeExceptionDetailInFaults="false"的一般错误背后的原因。您可以在配置文件中更改它:

代码语言:javascript
运行
复制
<services>
    <service name="serviceHost" behaviorConfiguration="serviceBehavior">
        <endpoint .... />
    </service>
</services>
<behaviors>
    <serviceBehaviors>
        <behavior name="serviceBehavior">
            <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
    </serviceBehaviors>
</behaviors>

您不需要创建自己的异常。FaultException将封装服务中抛出的真正异常,并向您显示消息和相关信息。

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

https://stackoverflow.com/questions/20954915

复制
相关文章

相似问题

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