【发布时间】:2014-04-24 17:03:12
【问题描述】:
我正在尝试在使用 iis 和 net.tcp 的 WCF 服务中实现 IErrorHandler。
我设置了一个在服务器中抛出 DivideByZeroException 的场景。 IErrorHandler 正在按预期触发。
FaultException 没有返回给客户端,我收到超时异常。我在事件日志中也找不到任何信息/异常。
这里是演示代码。 http://www.fileswap.com/dl/gQFlVsZK7M/(请点击慢速下载图片)
EDIT 1(从存档中添加代码供所有人查看):
服务合同:
[ServiceContract]
public interface IService1
{
[OperationContract]
[FaultContract(typeof(DivideByZeroException))]
string GetData(int value);
[OperationContract]
[FaultContract(typeof(DivideByZeroException))]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: Add your service operations here
}
服务实现:
public class Service1 : IService1
{
public string GetData(int value)
{
int i = 0;
//division by zero!
int y = 10/i;
return string.Format("You entered: {0}", value);
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite == null)
{
throw new ArgumentNullException("composite");
}
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
}
IErrorHandler 实现:
public class WcfErrorHandler : IErrorHandler
{
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
var v = error as DivideByZeroException;
if (v != null)
fault = Message.CreateMessage(
version,
new FaultException<DivideByZeroException>(v, new FaultReason(v.Message)).CreateMessageFault(),
"http://the.fault.action");
}
public bool HandleError(Exception error)
{
return true;
}
}
【问题讨论】:
-
把代码贴在这里,请确保它只是相关代码。我们不想浏览 3 英里的代码。
标签: c# wcf faultexception ierrorhandler