Foros del Web » Programando para Internet » ASPX (.net) »

Usar dll en ASP

Estas en el tema de Usar dll en ASP en el foro de ASPX (.net) en Foros del Web. Hola, cree un biblioteca de clases en c# , la cual me genera un dll llamado classlibrary1.dll, mi duda es como lo puedo accesar en ...
  #1 (permalink)  
Antiguo 19/09/2005, 21:41
 
Fecha de Ingreso: febrero-2002
Mensajes: 9
Antigüedad: 22 años, 1 mes
Puntos: 0
Usar dll en ASP

Hola, cree un biblioteca de clases en c# , la cual me genera un dll llamado classlibrary1.dll, mi duda es como lo puedo accesar en una pagina aspx en C#, esa librerya tiene una clase llamada public Class1(string sName,string sPass, string Domain,string File) la cual es la q quiero ejecutar desde el aspx.
De antemano muchisimas gracias por su ayuda!!
Saludos
  #2 (permalink)  
Antiguo 20/09/2005, 11:28
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Ya te asguraste de colocar la refererencia de tu dll en tu proyecto para poder usar la clase.??

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 20/09/2005, 12:40
 
Fecha de Ingreso: febrero-2002
Mensajes: 9
Antigüedad: 22 años, 1 mes
Puntos: 0
Hola, si ya me funciono era justo eso lo q me faltaba, ahora tengo otro problema, mira lo platico q ver si tienes alguna sugenrecia:

sucede q tengo q hacer una pagina donde voy a desplegar un rpt , dicho rpt se toma en base a la validacion de un usuario que esta en una base de datos, en la bd se tiene la ruta en la q se encuentra el archivo rpt dentro de la intranet, por lo q seun el usuario q ingrese es el reporte q le mando , el usuario es un usuario valido para los equipos en la red, el ejemplo q puse es un usuario q tiene acceso a la carpeta donde esta el rpt, si por ejemplo entro a Inicio- Ejecutar y le pongo la ip \\172.16.0.67 me manda la ventana para q ponga el usuario y el pass y ya entra a la carpeta donde estan los rpt de esa maquina.
Ahora bien esto lo quiero haces en el asp, pido el usuario y el pass, y voy a la bd y checo q reporte debe ver y en q ruta esta, y es lo q le mando al dll, como ya te habia comentado si ejecuto el dll en una aplicacion de windows si me crea el reporte en mi maquina para asi asignarselo a un visor de reportes, pero al usar el dll en el asp me manda esto:

Server Error in '/SVRClient' Application.
--------------------------------------------------------------------------------

Error de inicio de sesión: nombre de usuario desconocido o contraseña incorrecta.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IO.IOException: Error de inicio de sesión: nombre de usuario desconocido o contraseña incorrecta.

Source Error:


Line 40: //string sUser=WindowsIdentity.GetCurrent().Name;
Line 41:
Line 42: WebResponse oWebResp= oWebReq.GetResponse();
Line 43:
Line 44: if ( oWebResp.ContentLength>0 )


Source File: e:\proyectos asci\proyecto cocoon\dll\classlibrary1\class1.cs Line: 42

Stack Trace:


[IOException: Error de inicio de sesión: nombre de usuario desconocido o contraseña incorrecta.
]
System.IO.__Error.WinIOError(Int32 errorCode, String str) +723
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync, String msgPath, Boolean bFromProxy) +888
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync) +46
System.Net.FileWebStream..ctor(String path, FileMode mode, FileAccess access, FileShare sharing, Int32 length, Boolean async)
System.Net.FileWebResponse..ctor(Uri uri, FileAccess access, Boolean asyncHint)

[WebException: Error de inicio de sesión: nombre de usuario desconocido o contraseña incorrecta.
]
System.Runtime.Remoting.Proxies.RealProxy.EndInvok eHelper(Message reqMsg, Boolean bProxyCase) +497
System.Runtime.Remoting.Proxies.RemotingProxy.Invo ke(Object NotUsed, MessageData& msgData) +598
System.Net.AsyncGetResponse.EndInvoke(IAsyncResult result) +0
System.Net.FileWebRequest.EndGetResponse(IAsyncRes ult asyncResult)
System.Net.FileWebRequest.GetResponse()
ClassLibrary1.Class1.AddReport(String sName, String sPass, String Domain, String File) in e:\proyectos asci\proyecto cocoon\dll\classlibrary1\class1.cs:42
SVRClient.WebForm1.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\svrclient\frmcarga.aspx.cs:83
System.Web.UI.Control.OnLoad(EventArgs e)
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Page.ProcessRequestMain()




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:1.1.4322.573; ASP.NET Version:1.1.4322.573

Cheq con string sUser=WindowsIdentity.GetCurrent().Name; que usuario esta activo y me manda el de DIANAPC\ASPNET, pero si le pongo lo de impersonate y le paso los datos de por ejemplo INFORMADOR\ale me manda como usuario el de DIANAPC\Invitado y aun asi me manda el fallo.

Mi codigo es el siguiente:
el codigo q puse para el Dll q es el que se conecta al servidor remoto toma el archivo y lo copia en mi servidor:

public void AddReport(string sName,string sPass, string Domain,string File)
{
string sUserName=sName;//@"INFORMADOR\ale";
string sPassword=sPass;//"avalos";
string sDomain=Domain;//"INFORMADOR"; // con los datos del password.
string sUri=File;//"file:////172.16.0.67/Sitio/Caj/Reportes/P5rEntregaCajaSuscripciones.rpt";
Uri oNewUri = new Uri(sUri);
string sFile = sUri.Substring(sUri.LastIndexOf("/")+1);

FileWebRequest oWebReq = (FileWebRequest) WebRequest.Create(oNewUri);

oWebReq.Method="GET";//"POST";
CredentialCache wrCache = new CredentialCache();
wrCache.Add(new Uri(sUri),"Digest",new NetworkCredential(sUserName,sPassword,sDomain)); // aqui se ponen los datos de login
oWebReq.Credentials = wrCache;

WebResponse oWebResp= oWebReq.GetResponse();

if ( oWebResp.ContentLength>0 )
{
byte[] bytes = new byte[oWebResp.ContentLength];

Stream oStreamOut = oWebResp.GetResponseStream ();
oStreamOut.Read(bytes,0,bytes.Length);
FileStream fs = new FileStream(sFile,FileMode.CreateNew);
fs.Write(bytes,0,bytes.Length);
fs.Close();
oStreamOut.Close();

}

Y ahora si esta dll la agrego en un proyecto de winforms funciona bien pero la mismas lineas donde la mando llamar en un web form no funciona, aqui el codigo:

private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here

this.ImpersonateUser("Diana","diana","DIANAPC");
string sUser=WindowsIdentity.GetCurrent().Name;

Class1 oClass = new Class1();
oClass.AddReport(@"INFORMADOR\ale","avalos","INFOR MADOR","file:////172.16.0.67/Sitio/Caj/Reportes/P5rEntregaCajaSuscripciones.rpt");

}

Meti lo de impersonate para ver si era por eso q no me dejaba aqui la funcion:

[DllImport("advapi32.dll", SetLastError=true)]
private static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("kernel32.dll", CharSet=CharSet.Auto)]
private static extern bool CloseHandle(IntPtr handle);
// constants used by LogonUser() method
private const int LOGON32_LOGON_NETWORK = 3;
private const int LOGON32_PROVIDER_DEFAULT = 0;

private WindowsImpersonationContext wic = null;
private WindowsIdentity currentIdentity = null;
public void ImpersonateUser(string login, string password, string domain)
{
// Get current Identity
currentIdentity = WindowsIdentity.GetCurrent();
// handle returned from the LogonUser() method
IntPtr handle = new IntPtr(0);
handle = IntPtr.Zero;
// try to login to the domain
bool logonUser = LogonUser(login, domain, password,
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, ref handle);
// login unsuccessful
if(!logonUser)
{
// get the error
int lastWin32Error = Marshal.GetLastWin32Error();
throw new Exception("ImpersonateUser failed<br>Win32Error: " +
lastWin32Error);
}
// create a new WindowsIdentity, set the CurrentPrincipal and Impersonate the user
WindowsIdentity wi = new WindowsIdentity(handle, "NTLM", WindowsAccountType.Normal, true);
Thread.CurrentPrincipal = new WindowsPrincipal(wi);
wic = wi.Impersonate();
// close the handle
CloseHandle(handle);
}
public void Undo()
{
// Impersonate back to original identity
wic.Undo();
Thread.CurrentPrincipal = new WindowsPrincipal(currentIdentity);
currentIdentity.Impersonate();
}

Bueno espero pueda darme alguna sugerencia en verdad ya una semana con esto y me esta volviendo loca, de antemano muchisimas gracias
Saludos!!
  #4 (permalink)  
Antiguo 04/01/2008, 05:03
 
Fecha de Ingreso: enero-2008
Mensajes: 1
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Usar dll en ASP

Hola Diana:

Tengo el mismo error que tu:

"Error de inicio de sesión: nombre de usuario desconocido o contraseña incorrecta." al acceder a un archivo de una máquina diferente a donde se está ejecutando el código:

mFileStream = New System.IO.FileStream("\\89.0.1.204\comun\tito\TQ_B IZKAIBUS_IMSSERVER18031969.jpg", System.IO.FileMode.Open)


Si pongo una ruta local me funciona, imagino que será problema de permisos

¿alguna idea?

Gracias
  #5 (permalink)  
Antiguo 05/01/2008, 09:19
 
Fecha de Ingreso: febrero-2002
Mensajes: 9
Antigüedad: 22 años, 1 mes
Puntos: 0
De acuerdo Re: Usar dll en ASP

Hola, hace un buen de tiempo q tuve ese problema pero aun lo recuerdo y tengo el codigo de como yo lo solucione, espero te sea de utilidad mis sugerencias.
Mira Recuerdo q en la maquina donde tengo el servidor de IIS con mi sitio web le agregue un directorio virtual a la carpeta donde estan los archivos remotos y di los permisos necesarios, ademas tambien recuerdo que en mi site agregue un codigo para autenticacion, aqui telo anexo:
_______________________
cabecera:
____________________________
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Runtime.InteropServices;
using System.IO;
using System.Threading;
using System.Security.Permissions;
using System.Data.OleDb;
using System.Web.Security;
using System.Security.Principal;
using System.Net;
_________________________-
Variables:
___________________________
private const int LOGON32_LOGON_NETWORK = 3;
private const int LOGON32_PROVIDER_DEFAULT = 0;
private const int LOGON32_LOGON_INTERACTIVE=2;
private System.Security.Principal.WindowsImpersonationCont ext impersonationContext;
private WindowsImpersonationContext wic = null;
private WindowsIdentity currentIdentity = null;
________________________
Funciones
________________________
private bool impersonateValidUser(String userName, String domain, String password)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;

if(RevertToSelf())
{
if(LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if(DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
{
CloseHandle(token);
CloseHandle(tokenDuplicate);
return true;
}
}
}
}
if(token!= IntPtr.Zero)
CloseHandle(token);
if(tokenDuplicate!=IntPtr.Zero)
CloseHandle(tokenDuplicate);
return false;
}
public void Undo()
{
// Impersonate back to original identity
wic.Undo();
Thread.CurrentPrincipal = new WindowsPrincipal(currentIdentity);
currentIdentity.Impersonate();
}

______________________--
Llamada a la funcion:
________________________
impersonateValidUser("fotosistema", "172.16.0.67", "fotosistema");

__________________
El usuario q le pasas a la funcion debe existir en el equipo remoto para q puedas ser autenticado y claro tambien en tu equipo donde tienes el IIS, yo le otrogue permisos suficientes como para q me dejara manejar por completo los archivos pero ya tu puedes asignarle los permisos que requieras al crear el usuario.

Espero te sea util,
HASTA LUEGO!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 06:17.