/// <summary> /// Provides the ability to change run-time property values or insert custom extension objects such as error handlers, message or parameter interceptors, security extensions, and other custom extension objects. /// </summary> /// <param name="serviceDescription">The service description.</param> /// <param name="serviceHostBase">The host that is currently being built.</param> public virtual void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase) { this.OnProcessDispatchBehavior(serviceDescription, serviceHostBase); foreach (ChannelDispatcher cd in serviceHostBase.ChannelDispatchers) { // on each channel dispatcher this.OnIterateChannelDispatcher(cd); foreach (EndpointDispatcher ep in cd.Endpoints) { // Action Filter MessageFilter actionFilter = this.CreateActionFilter(ep); if (actionFilter != null) { ep.ContractFilter = actionFilter; } // Operation Selector IDispatchOperationSelector operationSelector = this.CreateOperationSelector(ep); if (operationSelector != null) { ep.DispatchRuntime.OperationSelector = operationSelector; } // on each endpoint dispatcher this.OnIterateEndpointDispatcher(ep); } } }
static string GetOperationName(Uri address, IDispatchOperationSelector operationSelector) { Message message = Message.CreateMessage(MessageVersion.None, ""); message.Headers.To = address; HttpRequestMessageProperty messageProperty = new HttpRequestMessageProperty(); messageProperty.Method = "GET"; message.Properties.Add(HttpRequestMessageProperty.Name, messageProperty); return operationSelector.SelectOperation(ref message); }
static string GetOperationName(Uri address, IDispatchOperationSelector operationSelector) { Message message = Message.CreateMessage(MessageVersion.None, ""); message.Headers.To = address; HttpRequestMessageProperty messageProperty = new HttpRequestMessageProperty(); messageProperty.Method = "GET"; message.Properties.Add(HttpRequestMessageProperty.Name, messageProperty); return(operationSelector.SelectOperation(ref message)); }
internal CustomDemuxer(IDispatchOperationSelector selector) { this.selector = selector; this.map = new Dictionary<string, DispatchOperationRuntime>(); }
public RestServiceOperationSelector(IDispatchOperationSelector endpoint) { m_Operation = endpoint; }
internal CustomDemuxer(IDispatchOperationSelector selector) { _selector = selector; _map = new Dictionary <string, DispatchOperationRuntime>(); }
public HttpOverrideOperationSelector(IDispatchOperationSelector originalSelector) { this.originalSelector = originalSelector; }
void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase) { ModuleProc PROC = new ModuleProc(this.DYN_MODULE_NAME, "WcfCustomBehaviorBase"); try { // on process the service description this.OnServiceDispatchBehavior(serviceDescription, serviceHostBase); // on each service endpoints this.OnIterateServiceEndpoints(serviceDescription); // dispatchers foreach (ChannelDispatcher cd in serviceHostBase.ChannelDispatchers) { // on each channel dispatcher this.OnIterateChannelDispatcher(cd); // Error handlers IErrorHandler[] errorHandlers = this.CreateErrorHandlers(cd); if (errorHandlers != null) { foreach (var errorHandler in errorHandlers) { Log.Info(PROC, "(" + cd.BindingName + ") Error Handler Added : " + errorHandler.ToString()); cd.ErrorHandlers.Add(errorHandler); } } // on each endpoint dispatcher foreach (EndpointDispatcher ep in cd.Endpoints) { // Contract Filter (Action) MessageFilter contractFilter = this.CreateContractFilter(ep); if (contractFilter != null) { Log.Info(PROC, "(" + ep.EndpointAddress.ToString() + ") Contract Filter Added : " + contractFilter.ToString()); ep.ContractFilter = contractFilter; } // Address Filter (To) MessageFilter addressFilter = this.CreateAddressFilter(ep); if (addressFilter != null) { Log.Info(PROC, "(" + ep.EndpointAddress.ToString() + ") Address Filter Added : " + addressFilter.ToString()); ep.AddressFilter = addressFilter; } // Operation Selector IDispatchOperationSelector operationSelector = this.CreateOperationSelector(ep, ep.DispatchRuntime.OperationSelector); if (operationSelector != null) { Log.Info(PROC, "(" + ep.EndpointAddress.ToString() + ") Operation Selector Added : " + operationSelector.ToString()); ep.DispatchRuntime.OperationSelector = operationSelector; } // on each endpoint dispatcher this.OnIterateEndpointDispatcher(ep); } } } catch (Exception ex) { Log.Exception(PROC, ex); } }
protected virtual IDispatchOperationSelector CreateOperationSelector(EndpointDispatcher dispatcher, IDispatchOperationSelector oldOperationSelector) { return(null); }