Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用带有WCF 4休息服务的温莎城堡WCF设施可提供';找不到组件';错误_Wcf_Rest_Castle Windsor_Castle - Fatal编程技术网

使用带有WCF 4休息服务的温莎城堡WCF设施可提供';找不到组件';错误

使用带有WCF 4休息服务的温莎城堡WCF设施可提供';找不到组件';错误,wcf,rest,castle-windsor,castle,Wcf,Rest,Castle Windsor,Castle,作为StackOverflow的长期读者,但没有找到解决我问题的方法,这是我第一次尝试提出问题,所以不要对我太苛刻:-) 我有以下WCF 4 REST服务定义: 服务合同 namespace RestService2.Service { [ServiceContract] public interface ISampleService { [WebGet(UriTemplate = "")] List<SampleItem> Get

作为StackOverflow的长期读者,但没有找到解决我问题的方法,这是我第一次尝试提出问题,所以不要对我太苛刻:-)

我有以下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);
    }
}
namespace RestService2.Service
{
[服务合同]
公共接口是一个简单的服务
{
[WebGet(UriTemplate=”“)]
List GetCollection();
[WebInvoke(UriTemplate=”,Method=“POST”)]
SampleItem创建(SampleItem实例);
[WebGet(UriTemplate=“?id={id}”)]
SampleItem-Get(int-id);
[WebInvoke(UriTemplate=“?id={id}”,Method=“PUT”)]
SampleItem更新(int-id,SampleItem实例);
[WebInvoke(UriTemplate=“?id={id}”,Method=“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..
}
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed]
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
公共类SampleService:ISampleService
{
私有IDatabase数据库;
公共样本服务(IDatabase db)
{
这个.db=db;
}
公共样本服务()
{
}
公共列表GetCollection()
{
返回db.Items.Values.ToList();
}
公共SampleItem创建(SampleItem实例)
{
//将SampleItem的新实例添加到集合中
db.Items.Add(instance.Id,instance);
返回db.Items[instance.Id];
}
//…其余省略。。
}
数据库接口:

using RestService2.Entities;

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

   }
}
使用RestService2.实体;
命名空间RestService2.Service
{
公共接口IDatabase
{
字典项{get;}
}
}
数据库实施:

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

    public Database()
    {
    }

    public Dictionary<int, SampleItem> Items
    {
        get
        {
            return items;
        }
    }
}
公共类数据库:IDatabase
{
私人词典项目;
公共数据库()
{
}
公共词典项
{
得到
{
退货项目;
}
}
}
..和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)));
        }
    }
}
namespace RestService2.Web
{
公共类全局:HttpApplication
{
静态IWindsorContainer容器{get;set;}
无效应用程序\u启动(对象发送方,事件参数e)
{
BuildContainer();
注册表项();
}
私有void BuildContainer()
{
容器=新WindsorContainer();
Container.AddFacility()
.Register(组件.For().ImplementedBy().Named(“SampleService”))
.Register(Component.For().ImplementedBy());
}
私有无效注册表项()
{
RouteTable.Routes.Add(新服务路由(“SampleService”),
新的DefaultServiceHostFactory(),typeof(SampleService));
}
}
}
服务契约、服务实现、数据库接口和数据库实现在程序集A中,SampleItem(实体)在程序集B中定义,global.asax.cs在程序集C中

我已将程序集A和B的引用添加到程序集C

当我尝试访问服务帮助页面(或任何服务方法)时,我收到以下错误消息:
找不到类型为RestService2.service.SampleService、RestService2.service、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null的组件,您忘记注册了吗?

知道有什么问题吗?如何正确配置容器


由于您按具体类型注册了布线,因此考虑

RouteTable.Routes.Add(new ServiceRoute("SampleService", 
            new DefaultServiceHostFactory(), typeof(SampleService))); 
就我记忆所及,你不能不这样做。。。我的意思是你不能通过接口注册,你也需要通过混凝土注册到容器中

而不是

 .Register(Component.For<ISampleService>().ImplementedBy<SampleService>().Named("SampleService")) 
.Register(Component.For().ImplementedBy().Named(“SampleService”))
试一试

.Register(Component.For().Named(“SampleService”))

我能够使用wcfinintegration工具构建REST服务,使用注册接口和MVC路由机制

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

当我尝试此操作并尝试在浏览器中访问“帮助”页面(包含操作列表)时,会得到一个空白页面。我用“标准”主机工厂添加了另一个路由:RouteTable.Routes.Add(新的ServiceRoute(“SampleServiceStd”,new WebServiceHostFactory(),typeof(SampleService));在这里,帮助页面确实起作用。有什么想法吗?在尝试了一次又一次的尝试之后,我决定放弃WCF设施,使用中描述的方法。这对我来说是可行的,但遗憾的是我没有让WCF设施正常工作。同样令人遗憾的是,这一特殊设施缺乏相关文件
// SVC Routes
routes.Add(new ServiceRoute("Example", new WindsorServiceHostFactory<RestServiceModel>(), typeof(IExample)));
http://localhost:80/Core/Example/GetAll/