+2010-04-02 Atsushi Enomoto <atsushi@ximian.com>
+
+ * EndpointDispatcher.cs : fill FaultContractInfos.
+ * DispatchOperation.cs : do not fill them dynamically/automatically.
+ * ErrorProcessingHandler.cs : added some FIXME notes.
+
2010-03-30 Atsushi Enomoto <atsushi@ximian.com>
* ChannelDispatcher.cs : differentiate EndpointNotFound and
IOperationInvoker invoker;
SynchronizedCollection<IParameterInspector> inspectors
= new SynchronizedCollection<IParameterInspector> ();
- SynchronizedCollection<FaultContractInfo> fault_contract_infos;
+ SynchronizedCollection<FaultContractInfo> fault_contract_infos
+ = new SynchronizedCollection<FaultContractInfo> ();
SynchronizedCollection<ICallContextInitializer> ctx_initializers
= new SynchronizedCollection<ICallContextInitializer> ();
}
public SynchronizedCollection<FaultContractInfo> FaultContractInfos {
- get {
- if (fault_contract_infos == null) {
- var l = new SynchronizedCollection<FaultContractInfo> ();
- foreach (var f in Description.Faults)
- l.Add (new FaultContractInfo (f.Action, f.DetailType));
- fault_contract_infos = l;
- }
- return fault_contract_infos;
- }
+ get { return fault_contract_infos; }
}
public IDispatchMessageFormatter Formatter {
if (handler.HandleError (ex))
break;
+ // FIXME: remove them. FaultConverter also covers errors like EndpointNotFoundException, which this handler never covers. And checking converter twice is extraneous, so this part is just extraneous.
+ // FIXME: instead, FaultContractInfos should be checked
FaultConverter fc = FaultConverter.GetDefaultFaultConverter (dispatchRuntime.ChannelDispatcher.MessageVersion);
Message res = null;
if (!fc.TryCreateFaultMessage (ex, out res))
throw ex;
mrc.ReplyMessage = res;
+
if (duplex != null)
mrc.Reply (duplex, true);
else