public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState) { WcfErrorResponseData error = correlationState as WcfErrorResponseData; if (error != null) { HttpResponseMessageProperty responseProperty = new HttpResponseMessageProperty(); reply.Properties["httpResponse"] = responseProperty; responseProperty.StatusCode = error.StatusCode; IList <KeyValuePair <string, string> > headers = error.Headers; if (headers != null) { for (int i = 0; i < headers.Count; i++) { responseProperty.Headers.Add(headers[i].Key, headers[i].Value); } } } }
public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext) { object correlationState = null; HttpRequestMessageProperty requestMessage = request.Properties["httpRequest"] as HttpRequestMessageProperty; if (request == null) { throw new InvalidOperationException("Invalid request type."); } string authHeader = requestMessage.Headers["Authorization"]; if (string.IsNullOrEmpty(authHeader) || !Authenicate(OperationContext.Current.IncomingMessageHeaders.To.AbsoluteUri, requestMessage.Method, authHeader)) { WcfErrorResponseData error = new WcfErrorResponseData(HttpStatusCode.Forbidden); correlationState = error; request = null; } return(correlationState); }