Mercurial > silverbladetech
diff SilverlightExampleApp/SilverlightExampleApp.Web/Services/SilverlightFaultBehavior.cs @ 49:502f5f365649
Initial load for Silverlight Example Application
author | Steven Hollidge <stevenhollidge@hotmail.com> |
---|---|
date | Tue, 17 Apr 2012 17:57:52 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SilverlightExampleApp/SilverlightExampleApp.Web/Services/SilverlightFaultBehavior.cs Tue Apr 17 17:57:52 2012 +0100 @@ -0,0 +1,72 @@ +// This is an auto-generated file to enable WCF faults to reach Silverlight clients. + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Runtime.Serialization; +using System.Net; +using System.ServiceModel; +using System.ServiceModel.Channels; +using System.ServiceModel.Description; +using System.ServiceModel.Dispatcher; + +namespace SilverlightExampleApp.Web.Services +{ + public class SilverlightFaultBehavior : Attribute, IServiceBehavior + { + private class SilverlightFaultEndpointBehavior : IEndpointBehavior + { + public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) + { + } + + public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) + { + } + + public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) + { + endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new SilverlightFaultMessageInspector()); + } + + public void Validate(ServiceEndpoint endpoint) + { + } + + private class SilverlightFaultMessageInspector : IDispatchMessageInspector + { + public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) + { + return null; + } + + public void BeforeSendReply(ref Message reply, object correlationState) + { + if ((reply != null) && reply.IsFault) + { + HttpResponseMessageProperty property = new HttpResponseMessageProperty(); + property.StatusCode = HttpStatusCode.OK; + reply.Properties[HttpResponseMessageProperty.Name] = property; + } + } + } + } + + public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters) + { + } + + public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) + { + foreach (ServiceEndpoint endpoint in serviceDescription.Endpoints) + { + endpoint.Behaviors.Add(new SilverlightFaultEndpointBehavior()); + } + } + + public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) + { + } + } +}