Prism 4.1 Silverlight项目中的WCF错误

时间:2014-07-03 02:55:02

标签: wcf unity-container silverlight-5.0 prism-4

我创建了一个项目,它使用EF 6.1,DevArt Oracle Connector,Unit来托管WCF服务。我能够运行这个项目并且Ny * .svc URL也正常运行。现在我试图在我的Prism 4.1 Silverlight项目中使用此服务这也是与这个wcf项目进行通信。

但是当我尝试在我的App的1个模块中获取数据时,我收到了这个错误:

请指导我哪里出错?

错误

 Microsoft.Practices.Unity.ResolutionFailedException was unhandled by user code
 HResult=-2146233088
 Message=Resolution of the dependency failed, type = "Abs.Web.DomainServices.UserWcfService", name = "(none)".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The current type,  System.Collections.Generic.IDictionary`2[System.Type,System.Func`2[System.Data.Entity.DbContext,System.Object]], is an interface and cannot be constructed. Are you missing a type mapping?
-----------------------------------------------
At the time of the exception, the container was:

 Resolving Abs.Web.DomainServices.UserWcfService,(none)
Resolving parameter "Uw" of constructor Abs.Web.DomainServices.UserWcfService(Abs.Data.Contracts.IAbsDataRepoositoryWorkUnit Uw)
  Resolving Abs.Data.AbsDataRepoositoryWorkUnit,(none) (mapped from Abs.Data.Contracts.IAbsDataRepoositoryWorkUnit, (none))
Resolving parameter "repositoryProvider" of constructor Abs.Data.AbsDataRepoositoryWorkUnit(Abs.Data.Helpers.IRepositoryProvider repositoryProvider)
  Resolving Abs.Data.Helpers.RepositoryProvider,(none) (mapped from Abs.Data.Helpers.IRepositoryProvider, (none))
  Resolving parameter "repositoryFactories" of constructor Abs.Data.Helpers.RepositoryProvider(Abs.Data.Helpers.RepositoryFactories repositoryFactories)
    Resolving Abs.Data.Helpers.RepositoryFactories,(none)
    Resolving parameter "factories" of constructor Abs.Data.Helpers.RepositoryFactories(System.Collections.Generic.IDictionary`2[[System.Type, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Func`2[[System.Data.Entity.DbContext, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] factories)
      Resolving System.Collections.Generic.IDictionary`2[System.Type,System.Func`2[System.Data.Entity.DbContext,System.Object]],(none)

 Source=Microsoft.Practices.Unity
TypeRequested=UserWcfService
StackTrace:
   at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
   at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name, IEnumerable`1 resolverOverrides)
   at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
   at Microsoft.Practices.Unity.UnityContainerExtensions.Resolve(IUnityContainer container, Type t, ResolverOverride[] overrides)
   at Abs.Web.Ioc.UnityInstanceProvider.GetInstance(InstanceContext instanceContext, Message message) in d:\ProjectAbsWork\Abs.Web\Ioc\UnityInstanceProvider.cs:line 29
   at System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance(InstanceContext instanceContext, Message request)
   at System.ServiceModel.InstanceContext.GetServiceInstance(Message message)
   at System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
   InnerException: System.InvalidOperationException
   HResult=-2146233079
   Message=The current type, System.Collections.Generic.IDictionary`2[System.Type,System.Func`2[System.Data.Entity.DbContext,System.Object]], is an interface and cannot be constructed. Are you missing a type mapping?
   Source=Microsoft.Practices.Unity
   StackTrace:
        at Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForAttemptingToConstructInterface(IBuilderContext context)
        at lambda_method(Closure , IBuilderContext )
        at Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c__DisplayClass1.<GetBuildMethod>b__0(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey)
        at Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context)
        at lambda_method(Closure , IBuilderContext )
        at Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c__DisplayClass1.<GetBuildMethod>b__0(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey)
        at Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context)
        at lambda_method(Closure , IBuilderContext )
        at Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c__DisplayClass1.<GetBuildMethod>b__0(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey)
        at Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context)
        at lambda_method(Closure , IBuilderContext )
        at Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c__DisplayClass1.<GetBuildMethod>b__0(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey)
        at Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context)
        at lambda_method(Closure , IBuilderContext )
        at Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c__DisplayClass1.<GetBuildMethod>b__0(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
        at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
        at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
   InnerException: 

这是我从UnityInstanceProvide:IInstanceProvider Class复制的 接着这样:http://jamesheppinstall.wordpress.com/2012/06/20/windows-communication-foundation-resolving-wcf-service-dependencies-with-unity/

   public object GetInstance(InstanceContext instanceContext, Message message)
      {
        return Container.Resolve(ServiceType);
    }

当我的Prism模块尝试从WCF托管项目加载数据时。

在Prism UI项目中我得到了

  System.TimeoutException was unhandled by user code
  Message=The HTTP request to 'http://localhost:62269/DomainServices/UserWcfService.svc' has exceeded the allotted timeout. The time allotted to this operation may have been a portion of a longer timeout.
  StackTrace:
   at System.ServiceModel.Channels.Remoting.RealProxy.Invoke(Object[] args)
   at proxy_2.EndgetAllUser(IAsyncResult )
   at Abs.Tabtest.ViewModel.TabViewModel._AlUserCallBack(IAsyncResult ar)
   at System.ServiceModel.AsyncResult.Complete(Boolean completedSynchronously)

  InnerException: System.Net.WebException
   Message=""
   StackTrace:
        at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
        at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
        at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
   InnerException: System.Net.WebException
        Message=""
        StackTrace:
             at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
             at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClassa.<EndGetResponse>b__9(Object sendState)
             at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__0(Object sendState)
        InnerException: 

我的模块代码如下:用于在模块中注册服务。

   this.container.RegisterType<UserWcfService>(
            new ContainerControlledLifetimeManager(),
            new InjectionFactory(
                (c) => new ChannelFactory<UserWcfService>("CustomBinding_UserWcfService").CreateChannel()));

在ViewModel中使用:

    IEventAggregator _eventAggregator;
    UserWcfService _Userservice;
    public TabViewModel(ITabView view, IEventAggregator eventAggregator , UserWcfService service)
        : base(view)
    {
        _eventAggregator = eventAggregator;
        _Userservice = service;
       // var evt = _eventAggregator.GetEvent<UserUpdatedEvent>();
        //    if(evt!=null )evt.Subscribe(UserUpdatedJob);
        ButtonLabelText = "Holy Cow !!";
      _Userservice.BegingetAllUser(_AlUserCallBack, null);
    }
    public object asyncState { get; set; }

    private void _AlUserCallBack(IAsyncResult ar)
    {
        var a=_Userservice.EndgetAllUser(ar);
        _UserDetailsDataGridContext = a;
    }

不知道我哪里出错了。

1 个答案:

答案 0 :(得分:0)

这是为你搞砸的类型:Abs.Data.Helpers.RepositoryFactories。它的构造函数参数为IDictionary<Type,Func<DbContext,Object>>。您需要将此接口映射到实现,以便Unity解析依赖关系图。