It proved very simple to get going. I'd recommend anyone looking to use this facility gets the latest version of the source code in the trunk before starting and has a look at the demo project in there as this proved very helpful.
I quickly defined an interface and set it up as a contract (as per normal with WCF), I then created a class that implemented the interface. At this point in the Global.asax.cs I configured my Windsor container mappings like this:
ServiceDebugBehavior returnFaultsAndMex =
new ServiceDebugBehavior
{
IncludeExceptionDetailInFaults = true,
HttpHelpPageEnabled = true
};
ServiceMetadataBehavior metadata =
new ServiceMetadataBehavior {HttpGetEnabled = true};
container = new WindsorContainer()
.AddFacility<WcfFacility>()
.Register(
Component.For<INHibernateSessionManager>()
.Named("NHibernateSessionManager")
.ImplementedBy<NHibernateSessionManager>(),
Component.For<IBarRepositoryFactory>()
.Named("BarRepositoryFactory")
.ImplementedBy<BarRepositoryFactory>()
.DependsOn(Property.ForKey("sessionFactoryConfigPath")
.Eq(Path.Combine(
Path.GetDirectoryName(
GetType().Assembly.Location),
"Hibernate.cfg.xml"))),
Component.For<BarService>()
.Named("BarDomainService")
.ImplementedBy<BarService>(),
Component.For<IBarEnterpriseService>()
.Named("BarEnterpriseService")
.ImplementedBy<BarEnterpriseService>());
Next up was the .svc file:
<% @ServiceHost Service="BarEnterpriseService"
Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory, Castle.Facilities.WcfIntegration" %>
With a bit of work in the web.config file then, with a press of F5, I can navigate to the svc and get the MEX page:
<system.serviceModel>
<services>
<service name="Foo.Bar.EnterpriseServices.BarEnterpriseService" behaviorConfiguration="ReturnFaultsAndMex">
<endpoint contract="Foo.Bar.EnterpriseServiceContracts.IBarEnterpriseService"
binding="basicHttpBinding"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ReturnFaultsAndMex" >
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
This is great and very nicely integrates the whole WCF experience into my IOC centric application. I do still have a couple of areas where I have questions. In the global.asax file I included details of two behviours, for error details and to enable the MEX service. This code was lifted from the sample in the Castle trunk. I still needed to add these behaviours explicitly into the web.config though. Present or removed these registrations seem to have no effect, and I find the same to be the case with the demo app.
No comments:
Post a Comment