July 2, 2010

WCF facility for Castle Windsor - Service

In this blog post I will talk about using the WCF facility for Castle Windsor to create a WCF service in a hosted environment, like a ASP.NET Web Application or a WCF Service Application. In future posts I will discuss some extensions and other ways to configure, but first some basics.

This post is part of a blog post series about the WCF facility. See the introduction post for the other blog posts.

We all know that calling the container from your components is not good, but the WCF framework requires us to provide a parameter-less constructor. Luckily WCF has some extension points, so we can override the default behavior. One such extension point is that we can supply our own factory which will used to create the WCF service. The WCF facility supplies us with just such a factory, so we don't have to implement it ourselves.

To get things working we first have to add the WCF facility to our Windsor Container. If you don't have the dll's grab them from the demo project or compile your own from the source.

_container = new WindsorContainer().AddFacility<WcfFacility>();

Then we need to add the 'Factory' attribute to a .svc file. (I have removed all non essential stuff)

<%@ ServiceHost Service="WcfServer.DateService" Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory, Castle.Facilities.WcfIntegration" %>

Now the correct factory will be used. It might be a mystery how that factory knows which container to use. But it's actually quite simple. When the WCF facility gets added to the Windsor container, it will take the IKernel that it is extending and will store it in internal static field. So this might be a problem if you have more than one Windsor Container with the WCF facility running in one web application.

Now we can add the interface with it's implementation like you would any other component. However you need to make sure that you name your component, the same name as you specified in the .svc file for the Service attribute.

_container.Register(
Component.For<IDateService>()
.ImplementedBy<DateService>()
.LifeStyle.Transient
.Named("WcfServer.DateService"));

Now for configuration you have two choices, either you can use WCF's app.config/web.config default configuration or you can use WCF facility to do the configuration. If you are going to use *.config approach, then you have to make sure that the name of the service has to be the same as the implementation. I'll talk about letting the WCF facility do the configuration a other time.

I've included a small demo project. This is just a service host. So you will need to use WcfTestClient or create your own project and create a reference to that project. Next blogpost I will talk about using the WCF facility to create WCF clients. So next post I will extend the solution to include a client.

Download project

2 comments:

  1. To learn .net, C#, Java, Silverlight, Visual Basic, Asp .net with advanced concepts, you can visit http://advanceddotnettutorial.blogspot.com

    ReplyDelete
    Replies

    1. Giờ khắc này, hồng quang xuyên qua không gian, xuyên qua tinh không, xuyên qua tất cả hành tinh tu chân, giống như trước mặt hồng quang không có tồn tại bất cứ cái gì tồn tại. Chỉ qua ba nén hương, tất cả tu sĩ khắp bốn phía bên ngoài cửa Đông Hải Yêu Linh đều nhìn thấy nơi cuối chân trời hoặc những nơi xa khắp bốn phía, hồng sắc đang cuồn cuộn quay về giống như vạn mã bôn đăng.

      Những con sóng hồng quang này cuộn lại thành hình tròn cuốn sạch mọi thứ vào bên trong rồi phóng về cửa Đông Hải Yêu Linh.

      Hai mắt Vương Lâm mạnh mẽ co rút lại, trong mắt lộ ra vẻ kinh hoàng. Cảnh tượng thủy triều vừa rồi đã làm hắn sinh ra một cảm giác đặc biệt khôngdong tam mu lậu cho thuê phòng trọ cho thuê phòng trọ nhạc sàn cực mạnh tư vấn pháp luật qua điện thoại công ty luật hà nội số điện thoại tư vấn luật dịch vụ thành lập doanh nghiệp chân thật. Nhưng lúc này sau khi hắn nhìn thấy một loạt hồng quang cuộn tròn lại rồi phóng về ở bốn phương tám hướng, thì hắn lại thầm thở ra một hơi thật sâu.

      Trên thực tế thì vào giờ khắc này không chỉ có Vương Lâm mà trong đám tu sĩ ở bốn phía hễ là người nào lần đầu tiên được nhìn thấy cửa Đông Hải Yêu Linh được mở ra rồi thủy triều xuất hiện ngay sau đó, thì nổi kinh hãi trong lòng cũng không kém Vương Lâm là mấy. Có một số người đã hoàn toàn lạc bước vào trong những chấn động, mất đi cảm

      Delete