对于以下异常,未在异常窗口(->view详细信息)中指定原因:
此错误的创建者System.ServiceModel.FaultException没有指定原因。我怎么才能改变它来显示原因呢?(我需要1234显示在那里)
public class MysFaultException
{
public string Reason1
{
get;
set;
}
}
MyFaultException connEx = new MyFaultException();
connEx.Reason1 = "1234";
throw new FaultException<OrdersFaultException>(connEx);发布于 2014-01-06 17:10:31
如果希望将所有异常转发给调用方,那么I3arnon答案是很好的,但是如果您只希望通过一组有限的已知故障,则可以创建故障契约,让调用方知道可能会出现一组特定的异常,以便客户端能够准备好处理它们。这允许您传递潜在的预期异常,而无需将您的软件可能抛给客户端的所有异常转发。
下面是MSDN中的一个简单示例,它显示一个WCF服务捕获一个DivideByZeroException并将其提交给一个FaultException,然后传递给客户端。
[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);
}
}发布于 2014-01-06 16:50:00
WCF服务选择不显示使用includeExceptionDetailInFaults="false"的一般错误背后的原因。您可以在配置文件中更改它:
<services>
<service name="serviceHost" behaviorConfiguration="serviceBehavior">
<endpoint .... />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehavior">
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>您不需要创建自己的异常。FaultException将封装服务中抛出的真正异常,并向您显示消息和相关信息。
https://stackoverflow.com/questions/20954915
复制相似问题