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)
+        {
+        }
+    }
+}