servicio net c# wcf mono self-hosting

c# - net - wcf servicio windows



Servicio WCF alojado en Mono (1)

Actualmente estoy trabajando en un proyecto de C # que es una aplicación de consola que tiene un servicio de jabón WCF alojado en él.

Abajo está el código que estoy usando para abrir el host.

var baseAddress = new Uri(Configuration.soapServerSettings.soapServerUrl); var host = new ServiceHost(typeof(SoapServer), baseAddress); BasicHttpBinding basicHttpBinding = new BasicHttpBinding(); var meta = new ServiceMetadataBehavior() { HttpGetEnabled = true, HttpGetUrl = new Uri("", UriKind.Relative) }; host.Description.Behaviors.Add(meta); var debugBehaviour = new ServiceDebugBehavior() { HttpHelpPageEnabled = true, HttpHelpPageUrl = new Uri("", UriKind.Relative), IncludeExceptionDetailInFaults = true }; ServiceEndpoint endpnt = host.AddServiceEndpoint( typeof(ISoapInterface), basicHttpBinding, "EmailServer"); host.Description.Behaviors.Remove(typeof(ServiceDebugBehavior)); host.Description.Behaviors.Add(debugBehaviour); host.Open();

Esto funciona perfectamente bien en Windows, pero en Linux cuando lo consigo, recibo el siguiente mensaje:

Error de XmlSchema: el elemento con nombre http://schemas.microsoft.com/2003/10/Serialization/:anyType ya estaba contenido en la tabla de objetos de esquema. Considere configurar MONO_STRICT_MS_COMPLIANT en ''sí'' para imitar la implementación de MS. Elemento de esquema relacionado SourceUri:, Línea 3, Posición 3.

No tengo idea de por dónde empezar a investigar este problema.

Gracias por cualquier ayuda que usted nos pueda proporcionar

Actualización: De acuerdo con la sugerencia de Rob Goodwins, agregué el MONO_STRICT_MS_COMPLIANT como la variable de entorno que parece haber funcionado, puedo acceder al servicio. Sin embargo, ahora tengo un problema diferente. Tengo una página de PHP que hace varias solicitudes cada dos segundos, pero luego de un minuto, mi aplicación falla.

Me sale la siguiente excepción:

Este XmlWriter no acepta StartTag en este estado Error. en System.Xml.XmlTextWriter.WriteStartElement (prefijo System.String, System.String localName, System.String namespaceUri) [0x00000] en: 0 en System.Xml.DefaultXmlWriter.WriteStartElement (System.String prefix, System.String LocalName, System .String ns) [0x00000] en: 0 en System.Xml.XmlWriter.WriteStartElement (System.String localName, System.String ns) [0x00000] en: 0 en System.ServiceModel.Logger.TraceCore (TraceEventType eventType) Boolean hasRelatedActivity, Guid relatedActivity, System.Object [] data) [0x00000] in: 0 en System.ServiceModel.Logger.LogMessage (System.ServiceModel.Diagnostics.placas en un lugar). LogMessage (MessageLogSourceKind sourceKind, System.ServiceModeles.Channels.Chesels.permisos.permisos.permisos.permisos.permisos.permisos.permisos.permisos.Cartes.Cuenta.Cartes.Cuenta. ] en: 0 en System.ServiceModel.Channels.Http.HttpReq uestContext.Reply (System.ServiceModel.Channels.Message msg, TimeSpan timeout) [0x00000] en: 0 en System.ServiceModel.Dispatcher.MessageProcessing_parac.parac.parac.parac.parac.parac.parac.parac.parac.parac.parac.parac.parac.parac.parac.parac.parac.parac.parac.parac.parac.p.exploraciónContext.Cresciente.Presp. .Reply (System.ServiceModel.Dispatcher.MessageProcessingContext mrc, Boolean useTimeout) [0x00000] en: 0 en System.ServiceMatch.Parque.Correo.Parque de la embarcación.Rejo de la embarcación. ServiceModel.Dispatcher.BaseRequestProcessorHandler.ProcessRequestChain (System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00000] en: 0 a System.ServiceModel.Dispatcher.BaseRequestProcessorHandler.ProcessRequestChain (System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00000] en: 0 a System.ServiceModel.Dispatcher.HandlersChain.ProcessRequestChain (System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00000] en: 0 en System.ServiceModel.D ispatcher.BaseRequestProcessor.ProcessRequest (System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00000] en: 0

Excepción no controlada: System.InvalidOperationException: este XmlWriter no acepta StartTag en este estado Error. en System.Xml.XmlTextWriter.WriteStartElement (prefijo System.String, System.String localName, System.String namespaceUri) [0x00000] en: 0 en System.Xml.DefaultXmlWriter.WriteStartElement (System.String prefix, System.String LocalName, System .String ns) [0x00000] en: 0 en System.Xml.XmlWriter.WriteStartElement (System.String localName, System.String ns) [0x00000] en: 0 en System.ServiceModel.Logger.TraceCore (TraceEventType eventType) Boolean hasRelatedActivity, Guid relatedActivity, System.Object [] data) [0x00000] in: 0 en System.ServiceModel.Logger.Log (TraceEventType eventType, System.String message, System.Object [] args) [0x00000] en: 0 at System.ServiceModel.Logger.Error (mensaje de System.String, System.Object [] args) [0x00000] en: 0 en System.ServiceModel.Dispatcher.ListenerLoopManager.ProcessErrorWithHandlers (IChannel ch, System.Exception) .Mensaje y resolución) [0x00000] en: 0 en System.ServiceModel.Dispatcher.ListenerLoopManager.ProcessRequest (I Responda Respuesta de canal, System.ServiceModel.Channels.RequestContext rc) [0x00000] en: 0 en System.ServiceModel.Dispatcher.ListenerLoopManager.TryReceiveRequestDone (IAsyncResult result) [0x00000] en: 0

Además, parece que no puedo acceder al servicio a través del cliente de prueba WCF VS2010, no produce errores, simplemente se queda ahí con la barra de progreso al 50% y no hay más.

En el registro de errores de apache obtengo el siguiente error:

System.ArgumentException: Debería ser algo como [[hostname:] puerto:] VPath: realpath en Mono.WebServer.ApplicationServer.AddApplicationsFromCommandLine (aplicaciones System.String) [0x00000] in: 0 at (wrapper remoting-invoke-with-check) Mono.WebServer.ApplicationServer: AddApplicationsFromCommandLine (string) en Mono.WebServer.Apache.Server.RealMain (System.String [] args, raíz booleana, extinción booleana) [0x00000] en los que se encuentran en este país. with-check) Mono.WebServer.Apache.Server: RealMain (string [], bool, Mono.WebServer.IApplicationHost, bool) en Mono.WebServer.Apache.Server.Main (System.String [] args) [0x00000] in : 0 [ERROR] EXCEPCIÓN FATAL NO MANEJADA: System.ArgumentException: Debe ser algo como [[hostname:] port:] VPath: realpath en Mono.WebServer.ApplicationServer.AddApplicationsFromCommandLine (System.String applications) [0x00000] en: 0 wrapper remoting-invoke-with-check) Mono.WebServer.ApplicationServer: AddApplicationsFromCommandLine (string) a t Mono.WebServer.Apache.Server.RealMain (System.String [] args, raíz Boolean, IApplicationHost ext_apphost, Boolean quiet) [0x00000] en: 0 en (envoltura remoting-invoke-check-check) Mono.WebServer.Apache. Servidor: RealMain (string [], bool, Mono.WebServer.IApplicationHost, bool) en Mono.WebServer.Apache.Server.Main (System.String [] args) [0x00000] en: 0

Actualización 2: Parece que ahora tengo el tipo de trabajo, excepto que solo puedo acceder al servicio localmente. Es decir, se puede acceder al servicio web localmente y las funciones hacen lo que deberían, pero no puedo acceder a él desde otra PC. Es decir, estoy intentando acceder al servicio WCF en el servidor Mono utilizando el cliente de prueba WCF desde mi PC dev desde dev PC y luego obtengo el siguiente resultado:

Error: No se pueden obtener los metadatos de http://192.168.1.74:6525/ Si se trata de un servicio de Windows (R) Communication Foundation al que tiene acceso, verifique que haya habilitado la publicación de metadatos en la dirección especificada. Para obtener ayuda para habilitar la publicación de metadatos, consulte la documentación de MSDN en http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata URI de error de intercambio de metadatos: http://192.168.1.74:6525/ metadatos contienen una Referencia que no se puede resolver: ''http://192.168.1.74:6525/ ''.
Tipo de contenido application / soap + xml; charset = utf-8 no fue compatible con el servicio http://192.168.1.74:6525/ . Los enlaces de cliente y servicio pueden no coincidir. El servidor remoto devolvió un error: (415) Tipo de contenido esperado ''text / xml; charset = utf-8 ''but got'' application / soap + xml; charset = utf-8''.HTTP GET URI de error: http://192.168.1.74:6525/ El documento se entendió, pero no se pudo procesar. - El documento WSDL contiene enlaces que no se pudieron resolver. - Hubo un error al descargar '' http://localhost:6525/?xsd=xsd0 ''. - No se puede conectar al servidor remoto - No se pudo establecer conexión porque la máquina de destino lo rechazó activamente 127.0.0.1:6525.

Actualización 3: Después de más pruebas, parece como cuando se hacen muchas llamadas al servicio de una sola vez. La actualización constante en la página del navegador que hace uso del servicio parece fallar.

Parece que hay algo mal con el System.ServiceModel.Logger.TraceCore dentro de Mono. ¿Hay alguna manera de deshabilitar esta parte de mono para que no me afecte este problema?


Parece que puede haber algunos problemas relacionados con los permisos del servidor de alojamiento, compruebe una vez los permisos otorgados al puerto en particular. Espero que esto pueda ser útil.