I added support for WCF Data Services to the WCF Facility.  There is a
DataServiceHostFactory (and related types) that can be used the same
way as the DefaultServiceHostFactory is used.

Please let me know if I should provide this patch to someone specific
or deliver it differently.

Thanks!

--------------------------------------------------------------------------------

>From 7847d52664848f064762782b0583d10db7940d3d Mon Sep 17 00:00:00 2001
From: unknown <Fred@.(none)>
Date: Wed, 27 Apr 2011 11:26:12 -0500
Subject: [PATCH] Added convenient support for WCF Data Services by
providing a DataServiceHostFactory and other related types.

---
 .../Castle.Facilities.WcfIntegration.csproj        |    5 +++
 .../Service/Data/DataServiceHost.cs                |   11 +++++++
 .../Service/Data/DataServiceHostBuilder.cs         |   30 ++++++++++++
++++++++
 .../Service/Data/DataServiceHostFactory.cs         |   16 ++++++++++
 .../Service/Data/DataServiceModel.cs               |   25 ++++++++++++
++++
 .../Service/WcfServiceExtension.cs                 |    2 +
 6 files changed, 89 insertions(+), 0 deletions(-)
 create mode 100644 src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceHost.cs
 create mode 100644 src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceHostBuilder.cs
 create mode 100644 src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceHostFactory.cs
 create mode 100644 src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceModel.cs

diff --git a/src/Castle.Facilities.WcfIntegration/
Castle.Facilities.WcfIntegration.csproj b/src/
Castle.Facilities.WcfIntegration/
Castle.Facilities.WcfIntegration.csproj
index eba8875..aa3ca5e 100644
--- a/src/Castle.Facilities.WcfIntegration/
Castle.Facilities.WcfIntegration.csproj
+++ b/src/Castle.Facilities.WcfIntegration/
Castle.Facilities.WcfIntegration.csproj
@@ -64,6 +64,7 @@
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
     <Reference Include="System.Data" />
+    <Reference Include="System.Data.Services" />
     <Reference Include="System.IdentityModel" />
     <Reference Include="System.Runtime.Serialization">
       <RequiredTargetFramework>3.0</RequiredTargetFramework>
@@ -100,6 +101,10 @@
     <Compile Include="IWcfChannelExtension.cs" />
     <Compile Include="IWcfEndpointExtension.cs" />
     <Compile Include="IWcfServiceExtension.cs" />
+    <Compile Include="Service\Data\DataServiceHost.cs" />
+    <Compile Include="Service\Data\DataServiceHostBuilder.cs" />
+    <Compile Include="Service\Data\DataServiceHostFactory.cs" />
+    <Compile Include="Service\Data\DataServiceModel.cs" />
     <Compile Include="Service\Discovery
\AdHocServiceCatalogDiscovery.cs" />
     <Compile Include="Service\Discovery\InMemoryServiceCatalog.cs" />
     <Compile Include="Service\Discovery\IServiceCatalog.cs" />
diff --git a/src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceHost.cs b/src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceHost.cs
new file mode 100644
index 0000000..7016205
--- /dev/null
+++ b/src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceHost.cs
@@ -0,0 +1,11 @@
+namespace Castle.Facilities.WcfIntegration.Data
+{
+    using System;
+
+    public class DataServiceHost :
System.Data.Services.DataServiceHost
+    {
+        public DataServiceHost(Type serviceType, params Uri[]
baseAddresses) : base(serviceType, baseAddresses)
+        {
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceHostBuilder.cs b/src/Castle.Facilities.WcfIntegration/
Service/Data/DataServiceHostBuilder.cs
new file mode 100644
index 0000000..41ab084
--- /dev/null
+++ b/src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceHostBuilder.cs
@@ -0,0 +1,30 @@
+namespace Castle.Facilities.WcfIntegration.Data
+{
+    using System;
+    using System.ServiceModel;
+
+    using Castle.Core;
+    using Castle.MicroKernel;
+
+    public class DataServiceHostBuilder :
AbstractServiceHostBuilder<DataServiceModel>
+    {
+        public DataServiceHostBuilder(IKernel kernel) : base(kernel)
+        {
+        }
+
+        protected override ServiceHost
CreateServiceHost(ComponentModel model, DataServiceModel serviceModel,
params Uri[] baseAddresses)
+        {
+            return CreateServiceHost(model.Implementation,
GetEffectiveBaseAddresses(serviceModel, baseAddresses));
+        }
+
+        protected override ServiceHost
CreateServiceHost(ComponentModel model, Uri[] baseAddresses)
+        {
+            return CreateServiceHost(model.Implementation,
baseAddresses);
+        }
+
+        protected override ServiceHost CreateServiceHost(Type
serviceType, Uri[] baseAddresses)
+        {
+            return new DataServiceHost(serviceType, baseAddresses);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceHostFactory.cs b/src/Castle.Facilities.WcfIntegration/
Service/Data/DataServiceHostFactory.cs
new file mode 100644
index 0000000..021cebd
--- /dev/null
+++ b/src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceHostFactory.cs
@@ -0,0 +1,16 @@
+namespace Castle.Facilities.WcfIntegration
+{
+    using Castle.Facilities.WcfIntegration.Data;
+    using Castle.MicroKernel;
+
+    public class DataServiceHostFactory :
WindsorServiceHostFactory<DataServiceModel>
+    {
+        public DataServiceHostFactory()
+        {
+        }
+
+        public DataServiceHostFactory(IKernel kernel) : base(kernel)
+        {
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceModel.cs b/src/Castle.Facilities.WcfIntegration/Service/
Data/DataServiceModel.cs
new file mode 100644
index 0000000..14279b4
--- /dev/null
+++ b/src/Castle.Facilities.WcfIntegration/Service/Data/
DataServiceModel.cs
@@ -0,0 +1,25 @@
+namespace Castle.Facilities.WcfIntegration.Data
+{
+    using System;
+
+    public class DataServiceModel : WcfServiceModel<DataServiceModel>
+    {
+        public DataServiceModel()
+        {
+        }
+
+        public DataServiceModel(string baseAddress)
+        {
+            AddBaseAddresses(baseAddress);
+        }
+
+        public DataServiceModel(Uri baseAddress)
+        {
+            AddBaseAddresses(baseAddress);
+        }
+
+        public DataServiceModel(IWcfEndpoint endpoint) :
base(endpoint)
+        {
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Castle.Facilities.WcfIntegration/Service/
WcfServiceExtension.cs b/src/Castle.Facilities.WcfIntegration/Service/
WcfServiceExtension.cs
index a7584c3..b1d8519 100644
--- a/src/Castle.Facilities.WcfIntegration/Service/
WcfServiceExtension.cs
+++ b/src/Castle.Facilities.WcfIntegration/Service/
WcfServiceExtension.cs
@@ -11,6 +11,7 @@ namespace Castle.Facilities.WcfIntegration
        using System.ServiceModel.Activation;
        using System.ServiceModel.Channels;
        using Castle.Core;
+       using Castle.Facilities.WcfIntegration.Data;
        using Castle.Facilities.WcfIntegration.Internal;
        using Castle.Facilities.WcfIntegration.Rest;
        using Castle.MicroKernel;
@@ -170,6 +171,7 @@ namespace Castle.Facilities.WcfIntegration
                private void AddDefaultServiceHostBuilders()
                {
                        
AddServiceHostBuilder(typeof(DefaultServiceHostBuilder), false);
+                       AddServiceHostBuilder(typeof(DataServiceHostBuilder), 
false);
                        AddServiceHostBuilder(typeof(RestServiceHostBuilder), 
false);
                }

--
1.7.4.msysgit.0

-- 
You received this message because you are subscribed to the Google Groups 
"Castle Project Development List" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/castle-project-devel?hl=en.

Reply via email to