2012-07-18 19 views
1

作爲StackOverflow的長期讀者,但沒有找到解決我的問題的方法,這是我第一次嘗試提出問題, T爲太苛刻了我:-)在WCF 4 REST服務中使用Castle Windsor WCF工具給出'找不到組件'的錯誤

我有以下WCF 4 REST服務定義:

服務合同

namespace RestService2.Service 
{ 
    [ServiceContract] 
    public interface ISampleService 
    { 
     [WebGet(UriTemplate = "")] 
     List<SampleItem> GetCollection(); 

     [WebInvoke(UriTemplate = "", Method = "POST")] 
     SampleItem Create(SampleItem instance); 

     [WebGet(UriTemplate = "?id={id}")] 
     SampleItem Get(int id); 

     [WebInvoke(UriTemplate = "?id={id}", Method = "PUT")] 
     SampleItem Update(int id, SampleItem instance); 

     [WebInvoke(UriTemplate = "?id={id}", Method = "DELETE")] 
     void Delete(int id); 
    } 
} 

服務實現

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
public class SampleService : ISampleService 
{ 
    private IDatabase db; 
    public SampleService(IDatabase db) 
    { 
     this.db = db; 
    } 

    public SampleService() 
    { 
    } 
    public List<SampleItem> GetCollection() 
    { 
     return db.Items.Values.ToList(); 
    } 

    public SampleItem Create(SampleItem instance) 
    { 
     // Add the new instance of SampleItem to the collection 
     db.Items.Add(instance.Id, instance); 
     return db.Items[instance.Id]; 
    } 

    //..Rest omitted.. 
} 

數據庫接口:

using RestService2.Entities; 

namespace RestService2.Service 
{ 
    public interface IDatabase 
    { 
     Dictionary<int, SampleItem> Items { get; } 

    } 
} 

數據庫實現:

public class Database : IDatabase 
{ 
    private Dictionary<int, SampleItem> items; 

    public Database() 
    { 
    } 

    public Dictionary<int, SampleItem> Items 
    { 
     get 
     { 
      return items; 
     } 
    } 
} 

..和Global.asax文件

namespace RestService2.Web 
{ 
    public class Global : HttpApplication 
    { 
     static IWindsorContainer Container {get; set;} 

     void Application_Start(object sender, EventArgs e) 
     { 
      BuildContainer(); 
      RegisterRoutes(); 
     } 

     private void BuildContainer() 
     { 
      Container = new WindsorContainer(); 
      Container.AddFacility<WcfFacility>() 
      .Register(Component.For<ISampleService>().ImplementedBy<SampleService>().Named("SampleService")) 
      .Register(Component.For<IDatabase>().ImplementedBy<Database>()); 

     } 
     private void RegisterRoutes() 
     { 
      RouteTable.Routes.Add(new ServiceRoute("SampleService", 
      new DefaultServiceHostFactory(), typeof(SampleService))); 
     } 
    } 
} 

服務合同,服務實現,數據庫接口和數據庫實現在彙編A中,SampleItem(實體)在彙編B和全局中定義。 asax.cs是在組裝C.

我加入了從裝配A和B引用組裝C.

當我嘗試訪問該服務幫助頁面(或與此有關的任何服務方法)我得到的以下錯誤消息:Could not find a component with type RestService2.Service.SampleService, RestService2.Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, did you forget to register it?

任何想法可能是什麼問題?我應該如何正確配置容器?

問候

回答

2

我是能夠建立使用WCFIntegration設施REST服務,使用登記,並通過MVC路由機制這兩個接口。

// SVC Routes 
routes.Add(new ServiceRoute("Example", new WindsorServiceHostFactory<RestServiceModel>(), typeof(IExample))); 

記住調用RegisterRoutes(其中該代碼會)前登記在溫莎服務/實施。此外,請確保您在默認路由之前調用此路由註冊,否則將使用該路由。

服務可以那麼就可以通過路由調用,即:

http://localhost:80/Core/Example/GetAll/ 
+0

這是有效的!謝謝。 – keigezellig 2012-11-26 09:01:41

1

,因爲你的具體類型

RouteTable.Routes.Add(new ServiceRoute("SampleService", 
      new DefaultServiceHostFactory(), typeof(SampleService))); 

註冊的路由,並儘可能我記得你不能以其他方式做......我的意思是,你無法通過接口寄存器,你需要註冊成由混凝土容器以及

代替

.Register(Component.For<ISampleService>().ImplementedBy<SampleService>().Named("SampleService")) 

嘗試

.Register(Component.For<SampleService>().Named("SampleService")) 
+0

當我嘗試這一點,我嘗試訪問幫助頁面(與操作的列表)在瀏覽器中我得到一個空白頁。我在'標準'主機工廠添加了另一條路由:RouteTable.Routes.Add(new ServiceRoute(「SampleServiceStd」,new WebServiceHostFactory(),typeof(SampleService)));這裏的幫助頁面可以工作。有任何想法嗎? – keigezellig 2012-07-19 09:10:08

+0

嘗試並嘗試讓它無法運行後,我決定放棄WCF工具並使用[link](http://codebetter.com/howarddierking/2010/01/19/vanilla-yet-composable)中描述的方法-http服務與 - WCF-4和溫莎/)。這適用於我,但仍然很遺憾我沒有得到WCF設施的正常工作。遺憾的是,這個特定的設施缺乏文檔 – keigezellig 2012-07-19 14:11:07