C# WCF 服务在第一次从 MVC 站点访问时返回“请求的服务'...'无法激活”
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11343563/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
WCF Service returning "requested service '...' could not be activated" the first time it's accessed from an MVC site
提问by trembler2003
We have a WCF service (with no security) that is being accessed by an MVC3 website.
我们有一个 MVC3 网站正在访问的 WCF 服务(没有安全性)。
On the developer machines we have no problems with it but when our TeamCity setup builds the central version and deploys it under IIS7 the first time we load the MVC3 site and it accesses the WCF service - the service call returns the message:
在开发人员机器上,我们没有问题,但是当我们的 TeamCity 设置构建中央版本并将其部署在 IIS7 下时,我们第一次加载 MVC3 站点并访问 WCF 服务 - 服务调用返回消息:
System.ServiceModel.ServiceActivationException: The requested service, 'http://localhost:83/ABCStaticData/StaticDataService.svc' could not be activated. See the server's diagnostic trace logs for more information.**
System.ServiceModel.ServiceActivationException:无法激活请求的服务“http://localhost:83/ABCStaticData/StaticDataService.svc”。有关详细信息,请参阅服务器的诊断跟踪日志。**
If we immediately hit the same site again, everything works fine.
如果我们立即再次访问同一站点,则一切正常。
The server stack track when it throws the error is:
抛出错误时的服务器堆栈跟踪是:
Server stack trace:
服务器堆栈跟踪:
at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory1 factory, WebException responseException, ChannelBinding channelBinding)
at System.ServiceModel.Channels.HttpChannelFactory1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at ABC.StaticData.Editor.StaticDataServiceProxy.IStaticDataService.GetAllMarkets()
at ABC.StaticData.Editor.StaticDataServiceProxy.StaticDataServiceClient.GetAllMarkets() in c:\BuildAgent\worka3bcc468adcccb\StaticData\ABC.StaticData.Editor\Service References\StaticDataServiceProxy\Reference.cs:line 3195
at ABC.StaticData.Editor.Controllers.MarketsController.<>c__DisplayClass22.<.ctor>b__13() in c:\BuildAgent\worka3bcc468adcccb\StaticData\ABC.StaticData.Editor\Controllers\MarketsController.cs:line 263
at ABC.StaticData.Editor.Controllers.MarketsController.Index() in c:\BuildAgent\worka3bcc468adcccb\StaticData\ABC.StaticData.Editor\Controllers\MarketsController.cs:line 306
Does anyone have any ideas on what could be causing the problem or where to start looking?
有没有人对可能导致问题的原因或从哪里开始寻找有任何想法?
UPDATE: I forgot to mention the first that if we then don't access the site for a while and then go back, it gives the same error - then works again the second time.
更新:我忘了提到第一个,如果我们暂时不访问该站点然后返回,它会给出相同的错误 - 然后第二次再次工作。
UPDATE2: This is the event log entry text:
UPDATE2:这是事件日志条目文本:
WebHost failed to process a request.
Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/3043589
Exception: System.ServiceModel.ServiceActivationException: The service '/ABCStaticData/StaticDataService.svc' cannot be activated due to an exception during compilation. The exception message is: Could not load type 'System.Runtime.CompilerServices.AsyncStateMachineAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.. ---> System.TypeLoadException: Could not load type 'System.Runtime.CompilerServices.AsyncStateMachineAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
at System.ModuleHandle.ResolveType(RuntimeModule module, Int32 typeToken, IntPtr* typeInstArgs, Int32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type)
at System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, Object[] attributes, IList derivedAttributes, RuntimeType& attributeType, IRuntimeMethodInfo& ctor, Boolean& ctorHasParameters, Boolean& isVarArg)
at System.Reflection.CustomAttribute.IsCustomAttributeDefined(RuntimeModule decoratedModule, Int32 decoratedMetadataToken, RuntimeType attributeFilterType, Boolean mustBeInheritable)
at System.Reflection.CustomAttribute.IsDefined(RuntimeMethodInfo method, RuntimeType caType, Boolean inherit)
at System.Reflection.RuntimeMethodInfo.IsDefined(Type attributeType, Boolean inherit)
at Ninject.Infrastructure.Language.ExtensionsForMemberInfo.HasAttribute(MemberInfo member, Type type)
at Ninject.Selection.Heuristics.StandardInjectionHeuristic.ShouldInject(MemberInfo member)
at Ninject.Selection.Selector.<>c__DisplayClassa.<SelectMethodsForInjection>b__9(IInjectionHeuristic h)
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate)
at Ninject.Selection.Selector.<SelectMethodsForInjection>b__8(MethodInfo m)
at System.Linq.Enumerable.WhereArrayIterator`1.MoveNext()
at Ninject.Planning.Strategies.MethodReflectionStrategy.Execute(IPlan plan)
at Ninject.Planning.Planner.<>c__DisplayClass1.<CreateNewPlan>b__0(IPlanningStrategy s)
at Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map[T](IEnumerable`1 series, Action`1 action)
at Ninject.Planning.Planner.CreateNewPlan(Type type)
at Ninject.Planning.Planner.GetPlan(Type type)
at Ninject.Activation.Providers.StandardProvider.Create(IContext context)
at Ninject.Activation.Context.Resolve()
at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
at Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent)
at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent)
at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target)
at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass4.<Create>b__2(ITarget target)
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Ninject.Activation.Providers.StandardProvider.Create(IContext context)
at Ninject.Activation.Context.Resolve()
at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
at Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent)
at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent)
at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target)
at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass4.<Create>b__2(ITarget target)
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Ninject.Activation.Providers.StandardProvider.Create(IContext context)
at Ninject.Activation.Context.Resolve()
at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
at Ninject.Extensions.Wcf.BaseNinjectServiceHostFactory.CreateServiceHost(Type serviceType, Uri[] baseAddresses)
at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses)
at System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
at System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity)
at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
--- End of inner exception stack trace ---
at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
at System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(String relativeVirtualPath, EventTraceActivity eventTraceActivity)
Process Name: w3wp
Process ID: 3248
Just another point that we're developing using .NET 4.5 and Visual Studio 2012 RC.
还有一点是我们正在使用 .NET 4.5 和 Visual Studio 2012 RC 进行开发。
回答by Jocke
回答by Tratcher
I've hit the same "Could not load type 'System.Runtime.CompilerServices.AsyncStateMachineAttribute'", which I found out was because I had built my application using VS 2012 RTM, but then tried to deploy it on a machine that only had 4.5 Beta. The AsyncStateMachineAttribute is a new type added after Beta.
我遇到了同样的“无法加载类型 'System.Runtime.CompilerServices.AsyncStateMachineAttribute'”,我发现这是因为我使用 VS 2012 RTM 构建了我的应用程序,但随后尝试将它部署在一台只有4.5 测试版。AsyncStateMachineAttribute 是 Beta 版之后新增的类型。
回答by Wojciech Markowski
I've just manage to solve similar problem of random 'System.ServiceModel.ServiceActivationException' (thrown exception, then run on second hit.). The reason for the exception in my case was lack of memory on the server. To confirm the memory problem, you can do following:
我刚刚设法解决了类似的随机“System.ServiceModel.ServiceActivationException”问题(抛出异常,然后在第二次命中时运行。)。在我的情况下,异常的原因是服务器内存不足。要确认内存问题,您可以执行以下操作:
Application calling web service:
应用程序调用 Web 服务:
System.ServiceModel.ServiceActivationException: The requested service, 'XXX' could not be activated. See the server's diagnostic trace logs for more information.
Server stack trace:
at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory`1 factory, WebException responseException, ChannelBinding channelBinding)
at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
WCF trace log: nothing logged.
WCF 跟踪日志:没有记录。
On server hosting wcf service (the same as the calling application btw) in event logs except lot of crap info I've found:
在事件日志中托管 wcf 服务(与调用应用程序 btw 相同)的服务器上,除了我发现的大量废话信息:
Custom event details:
自定义活动详情:
WebHost failed to process a request.
Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/58366981
Exception: System.ServiceModel.ServiceActivationException: The service 'xxx' cannot be activated due to an exception during compilation. The exception message is: Memory gates checking failed because the free memory (xxx bytes) is less than 5% of total memory. As a result, the service will not be available for incoming requests. To resolve this, either reduce the load on the machine or adjust the value of minFreeMemoryPercentageToActivateService on the serviceHostingEnvironment config element.. ---> System.InsufficientMemoryException: Memory gates checking failed because the free memory (xxx bytes) is less than 5% of total memory. As a result, the service will not be available for incoming requests. To resolve this, either reduce the load on the machine or adjust the value of minFreeMemoryPercentageToActivateService on the serviceHostingEnvironment config element.
So solution for me was: 1. add more ram 2. release some of ram (temporary solution) 3. update web config of the web service:
所以我的解决方案是: 1. 添加更多内存 2. 释放一些内存(临时解决方案) 3. 更新网络服务的网络配置:
<configuration>
<system.serviceModel>
<serviceHostingEnvironment ... minFreeMemoryPercentageToActivateService="0" />
</system.serviceModel>
</configuration>
回答by ZoLraK Solutions
I had that problem too, what I did is:
我也有这个问题,我做的是:
- Go to the directory in the file system where the service resides
- you will have 2 files for the service
- yourService.svc
- yourService.svc.cs
Open the file yourService.svc and make sure that your service is configured, and the code behind looks like this:
<%@ ServiceHost Language="C#" Debug="true" Service="YourNamespace.yourService.svc" CodeBehind="yourService.svc.cs" %>
- 进入服务所在文件系统中的目录
- 您将有 2 个服务文件
- yourService.svc
- yourService.svc.cs
打开文件 yourService.svc 并确保您的服务已配置,后面的代码如下所示:
<%@ ServiceHost Language="C#" Debug="true" Service="YourNamespace.yourService.svc" CodeBehind="yourService.svc.cs" %>
I fixed my issue that way. I hope it helps!
我就是这样解决了我的问题。我希望它有帮助!
回答by vsp
I had this problem too and just simply put
我也有这个问题,只是简单地说
<serviceHostingEnvironment minFreeMemoryPercentageToActivateService="1">
under
在下面
<system.serviceModel>
<system.serviceModel>
And everything works fine.
一切正常。
回答by LapelCard
Everytime I have the same problem, I restart my computer and it works well. It frees up memory
每次我遇到同样的问题时,我都会重新启动计算机,它运行良好。它释放了内存
回答by Hasan
Check that the Memory of the server you are hosting the services on is not full.
检查您托管服务的服务器的内存是否已满。
回答by CSharper
This error occurs if you install IIS after installing Windows Communication Foundation (WCF). To fix it, simply run the following command:
如果在安装 Windows Communication Foundation (WCF) 之后安装 IIS,则会发生此错误。要修复它,只需运行以下命令:
"%WINDIR%\Microsoft.Net\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -r
Source: IIS Hosted Service Fails
来源:IIS 托管服务失败
回答by Kirk
I ran into this same issue today and instead of RAM being the problem it was disk space. After freeing up space, I had to restart the Application Pool and the issue was resolved.
我今天遇到了同样的问题,而不是 RAM 是问题,而是磁盘空间。释放空间后,我不得不重新启动应用程序池,问题得到解决。

