我想在使用iis和net.tcp的WCF服務中實現IErrorHandler。WCF FaultException IErrorHandler - 沒有返回到客戶端,導致超時異常
我設置了在服務器中拋出DivideByZeroException的場景。 IErrorHandler按預期發射。
FaultException不返回到客戶端,我得到超時異常。我在事件日誌中也找不到任何信息/異常。
這裏是演示代碼。 http://www.fileswap.com/dl/gQFlVsZK7M/(由檔案添加的代碼都可以看到它)(請點擊下載慢圖像)
編輯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英里的代碼。 – gunr2171