• Viernes 19 de Abril de 2024, 08:30

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Jonny

Páginas: [1]
1
C# / .net Remoting Y Wsdl
« en: Miércoles 5 de Abril de 2006, 15:47 »
Buenas,

Estoy intentando publicar un servicio web mediante remoting, para ello utilizo una clase que hereda de MarshalByRefObject. Esta clase únicamente tiene un método, al que como parámetro se le pasa otra clase [Serializable] que he creado. Esta última clase hace implemeta un interface también creada por mí, que contiene unos metodos básicos para tratamiento de objetos.

De forma más clara:

ObjetoRemoto.cs

/* Librerias importadas ... */

public class ObjetoRemoto : MarshalByRefObject
{
  /* Campos ... */

  public override object InitializeLifetimeService()
  {
    /* Cuerpo ... */
  }

  public int Metodo(ObjetoSerializable obj)
  {
    /* Cuerpo ... */
  }
}

- - - - - - - - - - - - - - - - - - - - - - - - - - - -

ObjetoSerializable.cs

/* Librerias importadas ... */

[Serializable]
public class ObjetoSerializable : IMiInterface
{
  /* Campos ... */

  /* Metodos ... */
}

- - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMiInterface.cs

/* Librerias importadas ... */

public interface IMiInterface
{
  /* Métodos básicos ... */
}

Cuando publico este servicio en el puerto 5000 y con el nombre "Servicio.soap", la comunicación por remoting funciona bien, pero cuando intento generar la clase proxy mediante Soapsuds me da un error de servidor, y cuando pongo en el navegador http://localhost:5000/Servicio.soap?wsdl me da la siguiente excepción:

System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.
   at System.Runtime.Remoting.MetadataServices.RealSchemaType.PrintMessageWsdl(TextWriter textWriter, StringBuilder sb, String indent, ArrayList refNames)
   at System.Runtime.Remoting.MetadataServices.XMLNamespace.PrintMessageWsdl(TextWriter textWriter, StringBuilder sb, String indent, ArrayList refNames)
   at System.Runtime.Remoting.MetadataServices.WsdlGenerator.PrintWsdl()
   at System.Runtime.Remoting.MetadataServices.WsdlGenerator.Generate()
   at System.Runtime.Remoting.MetadataServices.SUDSGenerator.Generate()
   at System.Runtime.Remoting.MetadataServices.MetaData.ConvertTypesToSchemaToStream(ServiceType[] serviceTypes, SdlType sdlType, Stream outputStream)
   at System.Runtime.Remoting.MetadataServices.SdlChannelSink.GenerateSdl(SdlType sdlType, IServerResponseChannelSinkStack sinkStack, ITransportHeaders requestHeaders, ITransportHeaders responseHeaders, Stream& outputStream)
   at System.Runtime.Remoting.MetadataServices.SdlChannelSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream)
   at System.Runtime.Remoting.Channels.Http.HttpServerTransportSink.ServiceRequest(Object state)
   at System.Runtime.Remoting.Channels.SocketHandler.ProcessRequestNow()

He comprobado que al no obligar al ObjetoSerializable a implementar el interface IMiInterface no me da ningún problema. Cada uno de estos tres ficheros pertenece a un assembly dirente, y también espacios de nombres diferentes. Mi objetivo es que se genere el WSDL en el primer ejemplo, ya que si el ObjetoSerializable no implementa IMiInterface pierde todas las funcionalidades de tratamiento de objetos que necesito.

¿Esto es un fallo del framework? ¿Tiene solución mi problema?

Gracias de antemano.

2
C# / Re: Campos Estáticos En Remoting
« en: Martes 28 de Marzo de 2006, 11:04 »
Al final lo que he hecho es marcar el clase [Serializable] con otro atributo:

[System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Assert, Name="FullTrust")]

Este atributo hace que se den permisos para acceder a los recursos de este código, aunque quien lo llame no los tenga.

Aunque he leído que esto puede crear vulnerabilidades en la seguridad, ¿alguien sabe algo para remediar esto?

Saludos.

3
C# / Campos Estáticos En Remoting
« en: Viernes 10 de Marzo de 2006, 08:36 »
Muy buenas:

Hola, soy un estudiante de informática que está haciendo proyecto de
fin de carrera. Me han asignado un proyecto en el que tengo que hacer
uso del lenguaje de programación C# en la plataforma .NET. Estoy
desarrollando una aplicación distribuida y en la cual hago uso de
remoting para la comunicación entre diferentes procesos.

En el servidor he publicado un servicio que tiene una función en el
que se le pasa como parámetro un objeto de una clase marcada como
[Serializable]. Esta clase tiene dos campos estáticos, que al
serializarlo en el cliente no da ningún problema, pero parece que en
el momento de deserializarlo y llamar al constructor estático en el
servidor se produce esta excepción:

Excepción no controlada del tipo 'System.Security.SecurityException'
en mscorlib.dll

Información adicional: Error de solicitud de permiso de tipo
System.Security.Permissions.FileIOPermission, mscorlib,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.

Los campos estáticos son los siguientes:

private const string PathSchema = DirectorioSchemas +
"Dispatcher\\MensajePrueba.xsd";
private static XmlSchemaCollection Schemas;

Y el constructor estático únicamente tiene estas dos líneas:

Schemas = new XmlSchemaCollection();
Schemas.Add(null, PathSchema);

La excepción se produce en la segunda instrucción del constructor
estático. Al debugear el string PathSchema tiene el valor correcto y
el XmlSchema está bien.

De momento he solucionado el problema de una manera bastante chapucera:
nada más comenzar el servidor he creado un objeto del mismo tipo que
el parámetro que mando, de está forma se llama al contructor
estático y a partir de ahí no me da ningún problema. Pero, no creo
que esta sea una solución correcta.

Espero que alguien sepa ayudarme.

Gracias y un saludo.

Edito (13-03-06):

Después de hacer unas pruebas me he dado cuenta que el problema es al intentar acceder al fichero del schema. He intentado acceder a un fichero de texto normal con la siguiente instrucción:

System.IO.File.Open("../../text.txt", System.IO.FileMode.Open);

Con idéntico resultado. Como conclusión decir que la excepción de produce al intentar leer un fichero. ¿Puede ser por la configuración de seguridad y permisos que tenga yo en el framework de .NET? ¿Cómo puedo cambiar eso para que tenga permisos para acceder a ficheros?

Páginas: [1]