Tengo un servicio SOAP que se ha estado ejecutando durante poco más de un mes. En las últimas dos semanas hemos tenido situaciones en las que el servicio comenzará aleatoriamente a generar excepciones. Cada vez, que parece estar relacionada con la extensión de exportación, y el error es siempre a lo largo de las siguientes líneas:Excepción periódica en extensión de exportación WSDL
Se inició una excepción en una llamada a una extensión de exportación de WSDL: System.ServiceModel.Description.DataContractSerializerOperationBehavior
Con "System.ArgumentException: el nodo nombrado es de un contexto de documento diferente". que parece ser la causa raíz cada vez.
Lo que me molesta es que este servicio no ha cambiado en un mes y medio, así que estoy confundido de repente nos daríamos los errores de la discusión. ¿Esto es más indicativo de un problema subyacente (pérdida de memoria o similar)?
Tengo acceso muy limitado a la máquina en la que se está ejecutando, pero puedo tratar de obtener cualquier información de respaldo según sea necesario. Aquí está la excepción completa el WSDL vuelve con:
An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.InvalidOperationException: An exception was thrown in a call to a WSDL export extension: System.ServiceModel.Description.DataContractSerializerOperationBehavior
Endpoint: [endpoint name here... hidden for security] ----> System.ArgumentException: The named node is from a different document context.
at System.Xml.XmlAttributeCollection.Append(XmlAttribute node)
at System.ServiceModel.Description.SoapHelper.CreateSoapFaultBinding(String name, WsdlEndpointConversionContext endpointContext, FaultBinding wsdlFaultBinding, Boolean isEncoded)
at System.ServiceModel.Description.MessageContractExporter.MessageBindingExporter.ExportMessageBinding(OperationDescription operation, Type messageContractExporterType)
at System.ServiceModel.Description.WsdlExporter.CallExtension(WsdlEndpointConversionContext endpointContext, IWsdlExportExtension extension)
--- End of inner ExceptionDetail stack trace ---
at System.ServiceModel.Description.ServiceMetadataBehavior.MetadataExtensionInitializer.GenerateMetadata()
at System.ServiceModel.Description.ServiceMetadataExtension.EnsureInitialized()
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.InitializationData.InitializeFrom(ServiceMetadataExtension extension)
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.GetInitData()
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.TryHandleMetadataRequest(Message httpGetRequest, String[] queries, Message& replyMessage)
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.ProcessHttpRequest(Message httpGetRequest)
at SyncInvokeGet(Object , Object[] , Object[])
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
EDIT: Yo quería aclarar que el servicio no siempre se golpeó esta excepción. A veces el wsdl vuelve bien, otras veces arroja esta excepción (yo diría que actualmente es una oportunidad 50/50 de obtener un retorno exitoso). No puedo entender ni por qué. Mi pensamiento inicial se dirige a un problema ambiental, pero si ese es el caso, no tengo ni idea de dónde apuntar al equipo de alojamiento.
EDIT 2: Desde que realicé la consulta inicial, descubrí que el cliente ha puesto los servicios en varios servidores y está utilizando un equilibrador de carga, que, en mi opinión, representa las respuestas aleatorias que recibimos. Les aconsejé cómo proceder, al menos para aislar el problema y partir de allí.
Gracias por la información, Sebastian. Desde que realicé la consulta inicial, descubrí que el cliente ha puesto los servicios en varios servidores y está utilizando un equilibrador de carga, que, en mi opinión, representa las respuestas aleatorias que recibimos. Les aconsejé cómo proceder, al menos para aislar el problema y partir de allí. ¡Gracias de nuevo! – Brian