static void BuildProxyOperation(OperationDescription operation, ClientRuntime parent) { ClientOperation child; if (operation.Messages.Count == 1) { child = new ClientOperation(parent, operation.Name, operation.Messages[0].Action); } else { child = new ClientOperation(parent, operation.Name, operation.Messages[0].Action, operation.Messages[1].Action); } child.TaskMethod = operation.TaskMethod; child.TaskTResult = operation.TaskTResult; child.SyncMethod = operation.SyncMethod; child.BeginMethod = operation.BeginMethod; child.EndMethod = operation.EndMethod; child.IsOneWay = operation.IsOneWay; child.IsTerminating = operation.IsTerminating; child.IsInitiating = operation.IsInitiating; child.IsSessionOpenNotificationEnabled = operation.IsSessionOpenNotificationEnabled; for (int i = 0; i < operation.Faults.Count; i++) { FaultDescription fault = operation.Faults[i]; child.FaultContractInfos.Add(new FaultContractInfo(fault.Action, fault.DetailType, fault.ElementName, fault.Namespace, operation.KnownTypes)); } parent.Operations.Add(child); }
static void BuildDispatchOperation(OperationDescription operation, DispatchRuntime parent, EndpointFilterProvider provider) { string requestAction = operation.Messages[0].Action; DispatchOperation child = null; if (operation.IsOneWay) { child = new DispatchOperation(parent, operation.Name, requestAction); } else { string replyAction = operation.Messages[1].Action; child = new DispatchOperation(parent, operation.Name, requestAction, replyAction); } child.HasNoDisposableParameters = operation.HasNoDisposableParameters; child.IsTerminating = operation.IsTerminating; child.IsSessionOpenNotificationEnabled = operation.IsSessionOpenNotificationEnabled; for (int i = 0; i < operation.Faults.Count; i++) { FaultDescription fault = operation.Faults[i]; child.FaultContractInfos.Add(new FaultContractInfo(fault.Action, fault.DetailType, fault.ElementName, fault.Namespace, operation.KnownTypes)); } if (provider != null) { if (operation.IsInitiating) { provider.InitiatingActions.Add(requestAction); } } if (requestAction != MessageHeaders.WildcardAction) { parent.Operations.Add(child); } else { if (parent.HasMatchAllOperation) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.SFxMultipleContractStarOperations0)); } parent.UnhandledDispatchOperation = child; } }