I have a distributed server application.
A client connects to a slave server and calls a method which is propagated to the master server. The master server throws a FaultException<CustomFault>()
.
The slave server propagates that FaultException<CustomFault>()
to the connected client then. But the client receives the non-generic FaultException
instead.
If I catch and rethrow it (create a new instance of FaultException<CustomFault>
) on slave server it works as expected:
protected void Rethrow(Action action)
{
try
{
action();
}
catch (FaultException<CustomFault> kEx)
{
throw new FaultException<CustomFault>(kEx.Detail);
}
}
Therefore I assume that all my interfaces are decorated correctly. I can only assume that microsoft considers throwing FaultExceptions via several servers is considered a security issue...
How can I identify that the FaultException was thrown from a different server? Checking the call stack for:
Server stack trace:
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
seems wrong to me. Any better ideas?
If anybody else has the same problem:
If the
FaultException
is from a remote source - theAction
property inidicates the service!