3ENGINE

Programación y otros cachivaches

Categoría: Tecnologia

Página 32/45

Tecnologia

Herramientas .Net Framework


Gracias a este artículo, dejo aquí una serie de herramientas de .Net Framework que pueden sacar de un apuro:

Herramienta Registro de IIS en ASP.NET (Aspnet_regiis.exe)
Herramienta Registro de SQL Server para ASP.NET (Aspnet_regsql.exe)
Herramienta de compilación de ASP.NET (Aspnet_compiler.exe)
Herramienta de comprobación de certificados (Chktrust.exe)
Desensamblador de MSIL (Ildasm.exe)
Ensamblador de MSIL (Ilasm.exe)
Herramienta Installer (Installutil.exe)

Una mención a Ildasm.exe: útil si quieres ver los metadatos de una dll o exe con código administrado, ver sus dependencias o chafardear el msil del mismo. El ejecutable se encuentra dentro del SDK de Visual Studio y no en el SDK del propio .NET Framework:

Archivos de programa\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin\ildasm.exe
Archivos de programa\Microsoft Visual Studio 8\SDK\v2.0\Bin\ ildasm.exe

Un artículo explicativo en la Web del Guille.




Tecnologia

La cuenta de Windows ‘IUSR_MYMACHINE’ y ‘ASPNET’


En Windows existen las cuentas locales ‘IUSR_MYMACHINE’ y ‘ASPNET’ (que a veces, dependiendo de la versión de IIS, aparece como NT AUTHORITY NETWORK SERVICE) y que están relacionadas con ASP.NET:

  • La cuenta ‘IUSR_MYMACHINE’ se configura para permitir acceso anónimo. Cuando una petición de una página ASP.NET es autorizada, se realiza una comprobación sobre dicho archivo para ver si la cuenta IUSR_MYMACHINE tiene permiso para leer ese archivo. Si es correcta, el acceso es autorizado.
  • La cuenta ‘ASPNET’ tiene mas privilegios que la anterior. Si por ejemplo necesitamos acceder a un SQLSERVER, necesitaremos una conexión de confianza y a una cuenta ASPNET se le puede dar esos privilegios.
  • Otra opción es especificar que usuario quieres que utilice asp.net configurando la sección identity en web.config.

Para comprobar que existen estas dos cuentas. Ir al administrador de equipos…

De este modo, si por ejemplo necesitamos dar privilegios a una carpeta, necesitamos añadir el usuario. Atención al detalle que es necesario especificar en nombre de la máquina antes que el nombre de la cuenta:

Enlaces:

IUSR vs. ASPNET user accounts
autenticacion-y-autorizacion
cuentas de usuario




Tecnologia

Debug desde VS.NET de un servicio Windows


A veces nos interesa hacer debug de un servicio de windows. Pero normalmente esto se hace complicado porque un servicio de windows no corre dentro de Visual Studio .NET porque es necesario instalarlo y registrarlo (installutil.exe y NET START).

Una manera cómoda y sencilla es añadir al metodo estático Main una directiva de compilación para diferenciar el modo debug del modo release, de manera que si estamos en debug iniciar el servicio Windows como una aplicación normal:

#if (!DEBUG)
  ServiceBase[] ServicesToRun;
  ServicesToRun = new ServiceBase[] { new MiWService() };
  ServiceBase.Run(ServicesToRun);
#else
  MiWService service = new MiWService();
  service.Init();
  System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
#endif

Por último, en la clase de tipo MiWService (que hereda de ServiceBase) escribir un método Init() que llame al método proteced OnStart():

public void Init()
{
  this.OnStart(null);
}

Para información mas detallada consultar aquí




Tecnologia

Invocando un Servicio Web WCF desde Delphi 7


Para que Delphi 7 importe el WSDL y genere el stub correctamente de un Servicio Web implementado en WCF (Windows Communication Foundation) hay que actualizar previamente D7 y añadir una línea de código.

Pasos a seguir.

1. Bajarse de la Web de Embarcadero el zip Delphi SOAP Runtime and Importer Update
2. Descomprimir el zip en una carpeta
3. Realizar previamente una copia de $(DELPHI)\Source\soap y copiar dentro el contenido de la carpeta src del zip
4. Realizar previamente una copia de $(DELPHI)\Bin\WSDLImp.exe y reemplazarlo por el que se encuentra en el zip
5. Abrir D7 y generar el stub.
6. Editar el stub generado y añadir, dentro de la sección initialization, la siguiente línea:

InvRegistry.RegisterInvokeOptions(TypeInfo([Nombre del servicio]),ioDocument);

7. Añadir las directivas de compilación CLEANUP_SOAP_HEADERS;FIX_ELEM_NODE_NS al proyecto
8. Añadir al Search Path del proyecto $(DELPHI)\Source\soap

Con estos pasos se solucionan, al menos, tres problemas:

1. Al invocar un método con parámetros D7 devuelve un error:

The formatter threw an exception while trying to deserialize the
message: Error in deserializing body of request message for operation ‘Testing’. End element ‘Body’ from namespace ‘http://schemas.xmlsoap.org/soap/envelope/’
expected. Found element ‘parameters’ from namespace

2. Al invocar un método con parámetros primitivos string, WCF recibe parámetros nulos
3. Al invocar un método con parámetros de instancia de una clase, WCF devuelve un error:

System.NullReferenceException: Object reference not set to an instance of an object