2012-07-05 58 views
22

Tenemos un servicio WCF (sin seguridad) al que accede un sitio web MVC3.Servicio WCF que devuelve "servicio solicitado '...' no se pudo activar" la primera vez que se accede desde un sitio MVC

En las máquinas desarrolladoras no tenemos problemas, pero cuando nuestra configuración de TeamCity crea la versión central y la implementa en IIS7 la primera vez que cargamos el sitio MVC3 y accede al servicio WCF, la llamada de servicio devuelve el mensaje:

System.ServiceModel.ServiceActivationException: El servicio solicitado, 'http: // localhost: 83/ABCStaticData/StaticDataService.svc' no se pudo activar. Consulte los registros de seguimiento de diagnóstico del servidor para obtener más información. **

Si volvemos inmediatamente al mismo sitio, todo funciona bien.

La pista pila del servidor cuando se lanza el error es:

Servidor de seguimiento de la pila:

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\work\55a3bcc468adcccb\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\work\55a3bcc468adcccb\StaticData\ABC.StaticData.Editor\Controllers\MarketsController.cs:line 263 
at ABC.StaticData.Editor.Controllers.MarketsController.Index() in c:\BuildAgent\work\55a3bcc468adcccb\StaticData\ABC.StaticData.Editor\Controllers\MarketsController.cs:line 306 

¿Alguien tiene alguna idea de lo que podría ser la causa del problema o por dónde empezar a buscar?

ACTUALIZACIÓN: Olvidé mencionar la primera que si no accedemos al sitio por un tiempo y luego volvemos, nos da el mismo error - luego vuelve a funcionar la segunda vez.

Update2: Este es el evento de texto entrada de registro:

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 

Sólo otro punto que estamos desarrollando utilizando .NET 4.5 y Visual Studio 2012 RC.

+0

¿Cuál es la excepción interna? – abatishchev

+0

No hay excepción interna. – trembler2003

+0

¿Estás seguro? ¿Cuál es el texto de entrada al registro de eventos apropiado? – abatishchev

Respuesta

0

¿La extensión .svc está registrada en IIS?

Ver MSDN para más detalles.

+0

Supongo que es porque se carga por segunda vez. Fue rápido para publicar mi respuesta. ¡Lo siento! – Jocke

2

He pulsado el mismo "No se pudo cargar el tipo 'System.Runtime.CompilerServices.AsyncStateMachineAttribute'", que descubrí que se debía a que había creado mi aplicación utilizando VS 2012 RTM, pero luego intenté implementarlo en un máquina que solo tenía 4.5 Beta. El AsyncStateMachineAttribute es un nuevo tipo agregado después de Beta.

23

Acabo de resolver un problema similar de 'System.ServiceModel.ServiceActivationException' al azar (excepción arrojada, y luego ejecutado en el segundo golpe). El motivo de la excepción en mi caso fue la falta de memoria en el servidor. Para confirmar el problema de memoria, puede hacer lo siguiente:

aplicación de llamada de servicio web: registro de seguimiento

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: nada conectado.

El servidor que aloja el servicio WCF (lo mismo que la aplicación de llamada por cierto) en los registros de eventos, excepto montón de información basura que he encontrado:

detalles del evento personalizado:

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. 

Así solución para mí fue: 1. agregar más ram 2.liberar algo de memoria RAM (solución temporal) 3. Web de actualización de configuración del servicio web:

<configuration> 
    <system.serviceModel> 
    <serviceHostingEnvironment ... minFreeMemoryPercentageToActivateService="0" /> 
    </system.serviceModel> 
</configuration> 
+0

genial, la RAM también fue mi problema !! –

+1

# 1 no era factible para mí (obstáculos burocráticos). Intenté # 3, trabajando como un encanto, al menos por ahora. ¡Muchas gracias! :) – Quester

0

tuve ese problema, lo que hice es:

  • Vaya al directorio en el archivo sistema en el que reside el servicio
  • que tendrá 2 archivos para el servicio
    • yourService.svc
    • yourService.svc.cs
  • Abrir el archivo yourService.svc y asegúrese de que el servicio está configurado, y el código subyacente se parece a esto:

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

me fijo mi problema de esa manera. ¡Espero que ayude!

11

tuve este problema también y simplemente poner

<serviceHostingEnvironment minFreeMemoryPercentageToActivateService="1"> 

bajo

<system.serviceModel>

y todo funciona bien.

+0

minFreeMemoryPercentageToActivateService = "1" – Jagd

+0

Su etiqueta 'serviceHostingEnvironment' no está cerrada, debe terminar con '/>' en lugar de '>'. – SharpC

-1

Cada vez que tengo el mismo problema, reinicio mi computadora y funciona bien. Libera la memoria

+1

No podemos reiniciar la PC cada vez que ocurre este error. ¿No es así? – Irshad

+0

Estoy de acuerdo con usted, no podemos permitirnos reiniciarlo todos los días más o menos. Haber agotado todas las sugerencias anteriores y todavía no funciona. Olvidamos el simple hecho de que la máquina necesita reiniciarse después de funcionar durante semanas para liberar recursos. Y Microsoft recomienda que: "Reinicie regularmente Reinicie su PC al menos una vez a la semana, especialmente si la usa mucho. Es una buena manera de limpiar su memoria y asegurarse de que cualquier proceso o servicio errante que se inicie se cierre. abajo." http://windows.microsoft.com/en-US/windows7/optimize-Windows-7-for-better-performance?72a92270 – LapelCard

0

Comprueba que la memoria del servidor en el que estás hospedando los servicios no está llena.

Cuestiones relacionadas