wcf - autofac wcf注册错误

标签 wcf autofac

我正在尝试在 Wcf 上使用 Autofac 构建结构。

    namespace WcfService1.Model
    {
        [DataContract(IsReference = true)]
        public partial class Account
        {
            [DataMember]
            public int Id { get; set; }
            [DataMember]
            public string Name { get; set; }
            [DataMember]
            public string Surname { get; set; }
            [DataMember]
            public string Email { get; set; }
            [DataMember]
            public Nullable<System.DateTime> CreateDate { get; set; }
        }    
    }

模型>IAccounRepository.cs

1.

namespace WcfService1.Model
{
  public interface IAccountRepository
    {
        IEnumerable<Account> GetAllRows();
        bool AddAccount(Account item);
    }
}

模型>AccounRepository.cs

2.

namespace WcfService1.Model
{
    public class AccountRepository:IAccountRepository
    {
        private Database1Entities _context;
        public AccountRepository()
        {
            if(_context == null)
                _context =new Database1Entities();
        }

        public IEnumerable<Account> GetAllRows()
        {
            if (_context == null)
                _context = new Database1Entities();
            return _context.Account.AsEnumerable();
        }        

        public bool AddAccount(Account item)
        {
            try
            {
                if (_context == null)
                    _context = new Database1Entities();
                _context.Entry(item).State = EntityState.Added;
                _context.Account.Add(item);
                _context.SaveChanges();
                return true;
            }
            catch (Exception ex)
            {
                var str = ex.Message;
                return false;
            }
        }
    }
}
  1. DbConnection > EntityFramework + DbContext

  2. IService1.cs

代码:

namespace WcfService1
{
    [ServiceContract(SessionMode = SessionMode.Allowed)]
    public interface IService1
    {
        [OperationContract]
        IList<Account> GetAccounts();

        [OperationContract]
        bool AddAccount(Account item);
    }
}
  1. Service1.cs

代码:

namespace WcfService1
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service1:IService1
    {
        private readonly IAccountRepository _repository;
        public Service1(IAccountRepository repository)
        {
            _repository = repository;
        }    
        public IList<Account> GetAccounts()
        {   
            var items = _repository.GetAllRows().ToList();
            return items;
        }
        public bool AddAccount(Account item)
        {
            item.CreateDate = DateTime.Now;    
            return _repository.AddAccount(item);
        }
    }
}
  1. Service1.svc

代码:

<%@ ServiceHost Language="C#"
                Debug="true"
                Service="WcfService1.Service1, WcfService1"
                Factory="Autofac.Integration.Wcf.AutofacWebServiceHostFactory, Autofac.Integration.Wcf" %>
  1. Global.asax.cs

代码:

protected void Application_Start(object sender, EventArgs e)
        {
            var builder = new ContainerBuilder();
            builder.RegisterType< AccountRepository>().As< IAccountRepository>();
            builder.RegisterType< Service1 >().As< IService1>();

            AutofacHostFactory.Container = builder.Build();
        }

我收到以下错误,找不到解决方案。我怎么了。

错误消息:

“/”应用程序中的服务器错误。

为 WCF 配置的服务“WcfService1.Service1、WcfService1”未在 Autofac 容器中注册。 描述:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。

异常详细信息:System.InvalidOperationException:为 WCF 配置的服务“WcfService1.Service1、WcfService1”未在 Autofac 容器中注册。

来源错误:

执行当前 Web 请求期间生成未处理的异常。有关异常来源和位置的信息可以使用下面的异常堆栈跟踪来识别。

堆栈跟踪:

[InvalidOperationException: The service 'WcfService1.Service1, WcfService1' configured for WCF is not registered with the Autofac container.]
   Autofac.Integration.Wcf.AutofacHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +667
   System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath, EventTraceActivity eventTraceActivity) +2943
   System.ServiceModel.HostingManager.ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity) +88
   System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity) +1239

[ServiceActivationException: The service '/Service1.svc' cannot be activated due to an exception during compilation.  The exception message is: The service 'WcfService1.Service1, WcfService1' configured for WCF is not registered with the Autofac container..]
   System.Runtime.AsyncResult.End(IAsyncResult result) +454
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +413
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, String routeServiceVirtualPath, Boolean flowContext, Boolean ensureWFService) +327
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext, Boolean ensureWFService) +46
   System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +384
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +238
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +114

最佳答案

除了其他答案之外,您还应该确保在 .svc 文件中 ServiceHost 元素的 Service 属性中使用完全限定的服务名称。

例如,而不是:

<%@ ServiceHost Language="C#" Debug="true" Service="MoviesService.MoviesService" CodeBehind="MoviesService.svc.cs" %>

用途:

<%@ ServiceHost Language="C#" Debug="true" Service="MoviesService.MoviesService, MoviesService" CodeBehind="MoviesService.svc.cs" %>
<小时/>

来源:http://jmonkee.net/wordpress/2011/09/05/autofac-wcfintegration-service-not-registered-with-the-autofac-container/

关于wcf - autofac wcf注册错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12143199/

相关文章:

.net - 使用MSBuild自动发布WCF库

c# - 如何将 IHttpClientFactory 与 Autofac 一起使用(使用网络框架)?

c# - Autofac:IEnumerable<IInterface> 将始终返回从 IInterface 派生的对象列表?

c# - WCF Ajax 服务 - 如何将数组或 JSON 传递给服务?方法参数类型应该是什么?

c# - 为什么我的 wcf 客户端中的操作契约(Contract)不能将接口(interface)作为参数?

c# - 在 Autofac 中使用接口(interface)作为类型参数解析泛型

c# - 使用 AutoFac 自动绑定(bind)接口(interface)

c# - “不支持返回 System.IServiceProvider 的 ConfigureServices。”

wcf - Protobuf net 在使用 WCF 时不序列化

c# - 如何从工作线程中调用 UI 线程上的方法?