Busca lo que quieras

Mostrando entradas con la etiqueta C#. Mostrar todas las entradas
Mostrando entradas con la etiqueta C#. Mostrar todas las entradas

Llamar método por otro hilo sin peligro a caerse en .NET

IIS por defecto tiene la maña de coger tus hilos que lanzes por segundo plano y MATARLOS.

Que asesino eres IIS!

Entonces, lo que necesitamos es colocarnos un ESCUDO PROTECTOR!.

Para lograrlo entonces tenemos que implementar una clase (que por cierto no hice yo, sino un duro de stackoverflow y que lo compartió al mundo... gracias stackoverflow y Gervasio Marchand).

Ojo que hay que importar lo siguiente en la clase:

using System.Web.Hosting;
using System.Threading.Tasks;

Esta es la clase:

 public class BackgroundWorker
    {
        /// <summary>
        /// Runs a background task that is registered with the hosting environment
        /// so it is guaranteed to finish executing.
        /// </summary>
        /// <param name="action">The lambda expression to invoke.</param>
        public static void Run(Action action)
        {
            new IISBackgroundTask().DoWork(action);
        }

        /// <summary>
        /// Generic object for completing tasks in a background thread
        /// when the request doesn't need to wait for the results 
        /// in the response.
        /// </summary>
        class IISBackgroundTask : IRegisteredObject
        {
            /// <summary>
            /// Constructs the object and registers itself with the hosting environment.
            /// </summary>
            public IISBackgroundTask()
            {
                HostingEnvironment.RegisterObject(this);
            }

            /// <summary>
            /// Called by IIS, once with <paramref name="immediate"/> set to false
            /// and then again with <paramref name="immediate"/> set to true.
            /// </summary>
            void IRegisteredObject.Stop(bool immediate)
            {
                if (_task.IsCompleted || _task.IsCanceled || _task.IsFaulted || immediate)
                {
                    // Task has completed or was asked to stop immediately, 
                    // so tell the hosting environment that all work is done.
                    HostingEnvironment.UnregisterObject(this);
                }
            }

            /// <summary>
            /// Invokes the <paramref name="action"/> as a Task.
            /// Any exceptions are logged
            /// </summary>
            /// <param name="action">The lambda expression to invoke.</param>
            public void DoWork(Action action)
            {
                try
                {
                    _task = Task.Factory.StartNew(action);
                }

                catch (Exception ex)
                {
                    //Logger.Log(ex);
                }
            }

            private Task _task;

        }
    }

Una vez tengamos la clase metida en nuestro cs o donde vayas a lanzar el método sencillamente puedes llamarlo así:

BackgroundWorker.Run(() =>
                                      MiMetodoAsincronoConEscudo(parametro1, parametro2, parametro3)
                                );// run this in a background thread

Y todos seamos felices!!! Ahora nunca nuestros hilos de segundo plano los matará IIS... GAnamos!!!!!

Para más información puedes mirar los siguientes links:

El peligro de implementar tareas en segundo plano.

Una confirmación de que IIS mata los hilos

El link que nos salva a todos.

Y de nuevo una explicación detallada de como podría funcionar el ESCUDO

Aquí hay un framework que ayuda a esto también.

Sean felices! :) Y siéntanse libres de opinar ;)

Borrar archivos por extensión en c#

Aquí esta el código en c# para cuando necesitamos borrar todos los archivos de un directorio por su extensión, tomando como guia un cs de un archivo aspx.

DirectoryInfo directory;
                string path = Server.MapPath("~");//se obtiene la raiz del sitio web
                path = Path.Combine(path, "temp");//carpeta temp ubicada en la raiz
                directory = new DirectoryInfo(path);
               

                foreach (FileInfo file in directory.GetFiles("*.zip"))
                {
                 
                        file.Delete();
                    
                }


Sean felices! :) Y siéntanse libres de opinar ;)

Lanzar método asincrono en c#

Bueno... a veces necesitamos que en una petición web, el servidor siga haciendo otra cosa mientras tanto. En ese caso lo que podemos hacer es lanzar por otro hilo un metodo, como sería? Así:

Task StatusRecovery = Task.Factory.StartNew(() => { response = MiMetodoNormal(parametro1, parametro2, otroparametro); });

Espero les sirva.

Sean felices! :) Y siéntanse libres de opinar ;)

Formato de moneda en razor c#

Bueno... creo que esto por fin es una luz para formatear nuestros números a monedas en razor, aunque también puede ser en c#... así:
Coloco el ejemplo completo y resalto la parte importante:

<h5><strong>Precio: @Html.Raw("$" + String.Format(System.Globalization.CultureInfo.CreateSpecificCulture("es-CO"), "{0:N0}", Convert.ToDecimal(@Model.productDetail.precio)))</strong></h5>

Entonces son tres parametros compañeros:

1) El parametro de la cúltura que vamos manejar: colombia, estados unidos (en-US), o el que quieran.
Aquí están las culturas: http://www.csharp-examples.net/culture-names/

2) El formato... es decir: con cuantos decimales, 1, 2  o 3 decimales o con separador de miles, etc. para más info aquí: http://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx

3) El número que deseamos convertir... OJO que esto debe recibir es un DECIMAL, no un string.

No es más... espero les sirva.

Sean felices! :) Y siéntanse libres de opinar ;)

Convertir datatable a json

Si alguna vez te sale un problema con referencia circular al pasar un datatable a un json, primero lo que hay que hacer es pasar un datatable a una lista de objetos...  Y esa lista es la que sí tienes que serializar.

Aquí está el código para pasar el datatable a la lista y posteriormente el código para pasar a json:

public List<Dictionary<string, object>> ValuesSelectInsuranceAndValidationDoc = new List<Dictionary<string,object>>();

DataTable auxTable = _presenter.View.StateOrder; //Esta es la tabla
            List<Dictionary<string, object>> rowsStateOrder = new List<Dictionary<string, object>>();
            Dictionary<string, object> row;
            if (auxTable != null)
            {
                foreach (DataRow dr in auxTable.Rows)
                {
                    row = new Dictionary<string, object>();
                    foreach (DataColumn col in auxTable.Columns)
                    {
                        row.Add(col.ColumnName, dr[col]);
                    }
                    rowsStateOrder.Add(row);
                }
                ValuesSelectInsuranceAndValidationDoc = rowsStateOrder;
            }

string json = "";            
json = new System.Web.Script.Serialization.JavaScriptSerializer().
                                Serialize(ValuesSelectInsuranceAndValidationDoc );


Espero les sirva...

Sean felices! :) Y siéntanse libres de opinar ;)

Convertir datatable a json en c#

Así sería el código para convertir un datatable a un string en formato json... y espero les sirva porque les soy sincero... no lo probé.... je je :P

Gracias a stackoverflow...

public string ConvertirDataTableAJson(DataTable dt)
        {
            System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
            Dictionary<string, object> row;
            foreach (DataRow dr in dt.Rows)
            {
                row = new Dictionary<string, object>();
                foreach (DataColumn col in dt.Columns)
                {
                    row.Add(col.ColumnName, dr[col]);
                }
                rows.Add(row);
            }
            return serializer.Serialize(rows);
          
        }

Sean felices! :) Y siéntanse libres de opinar ;)

Cargar un layout nulo en vista de MVC por código en C#

Puede que alguna vez en la vida necesitemos que nuestra vista cshtml de MVC no cargue con ninguna plantilla por defecto o layout.

Por lo general se coloca en el archivo cshtml así:

@{
    Layout = null;
}

Y si no queremos colocar lo anterior podemos hacerlo por código así...

 public ActionResult Notificationemail()
        {
            return PartialView();
        }


Espero les sirva...

Sean felices! :) Y siéntanse libres de opinar ;)

Instanciar clase mediante string en c#

Así sería un ejemplo para instanciar una clase con base en un string:


string className = "Notification" + NotificationsType.Name;
            string namespaceName = "Notification.Application.Services.Implementation.";
            
INotificationSender notificationInstance = (INotificationSender)System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(namespaceName + className);

Sean felices! :) Y siéntanse libres de opinar ;)

Convertir string a array de bytes y viceversa en c#

Aquí esta el código:

byte[] miarraydebytes = Convert.FromBase64String(aquiElString);
string decodificadoString = Encoding.UTF8.GetString(miarraydebytes);

O mejor utilizar esto para pasar de un byte[] convertido en string a un string hexadecimal asi:

string prueba = "p/8BFvYAyAACFgAEAY0AAiUA2QCrAAKUAOUAowACswAtAdwAAuAAPgGXAAIxACQBVgEBwADeANIAAmMB6ACCAAIXAMcAjgACmwASAUEAAgwArwCSAAKTAOkAWwACCgDPAFwAArUAxQB0AAKqAIYAhAABlgCFAHIAAp4AigBLAQKYAOIAdgACCwByAJIAAo8AvgBGAAK0AKwAywAChwB9AUDDAENDQoQFBIKBwkJEAkUCBQVAAAJAQoLFBANCAoHCwcBBAcVExUPDw0UCg8UEwkABRMOBAEFCAMFDgoEAxIQBAIFCgUSARQCBQUMAhMTFAcFBAgGBAcTERUAChEHBgAGBwYREQARAgYVBgIRExELBgMRAwYFEQQ=";
byte[] bytes = Convert.FromBase64String(prueba);
string hex = BitConverter.ToString(bytes);
Console.Write(hex.Replace("-",""));

Espero les sirva.

Sean felices! :) Y siéntanse libres de opinar ;)

Limpiar memoria de aplicaciones winforms con c#

Cuantas veces no nos hemos encontrado con el problema de la memoria en nuestras aplicaciones winforms porque la memoria empieza a crecer y a crecer y a crecer sin final.

Gracias a no se quien dejo aquí la clase que nos servirá para limpiar la memoria de nuestra aplicación que no se esta utilizando... muy práctica...

Para utilizarla solo debemos llamarla así:

MemoryManagement.FlushMemory();

Y eso es todo... la clase es esta:

 public class MemoryManagement
    {
        [DllImportAttribute("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet =
        CharSet.Ansi, SetLastError = true)]

        private static extern int SetProcessWorkingSetSize(IntPtr process, int minimumWorkingSetSize, int
        maximumWorkingSetSize);

        public static void FlushMemory()
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
            }
        }
    }

Espero les sirva como me funcionó a mi.

Sean felices! :) Y siéntanse libres de opinar ;)

Pasar un array de bytes a imagen en c# en .net

Pasar un array de bytes a una imagen en c# aquí esta el método

public System.Drawing.Image LoadImage()
        {
            byte[] bytes = Convert.FromBase64String("KñlJLKJÑlkKLHJKLkjlkJ==");

            System.Drawing.Image image;
            using (MemoryStream ms = new MemoryStream(bytes))
            {
                image = System.Drawing.Image.FromStream(ms);
            }
            return image;
        }

Sean felices! :) Y siéntanse libres de opinar ;)

Obtener ruta de imagen html en un aspx con c#

Y aquí esta el ejemplo de como obtener la ruta de imagen para ser colocada en una etiqueta img de html (Ejemplo de webforms):

<a href="#"><img border="0" style="border:0px;" src='<%=VirtualPathUtility.ToAbsolute("~/Shared/Images/Viewer/Change.png") %>' /></a>


Así que espero les sirva el código.

Sean felices! :) Y siéntanse libres de opinar ;)

Agregar en el config un valor en appsettings

Para webforms la lectura y escritura de un app.config en si mismo, no se puede.... toca crear otro archivo config... así que la manera de agregar un valor al config es:

Así sería la escritura:

//Crear archivo de configuración extra para definir envió o no de correos

                ExeConfigurationFileMap map = new ExeConfigurationFileMap();
                map.ExeConfigFilename = "wcfverificationhost.exe.config";
                Configuration config
                  = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
                config.AppSettings.Settings.Remove("sendMailAuditByMail");
                config.AppSettings.Settings.Add(new System.Configuration.KeyValueConfigurationElement("sendMailAuditByMail", "true"));
                config.Save();

Así sería la lectura:

 ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
                fileMap.ExeConfigFilename = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wcfverificationhost.exe.config");
                Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

                AppSettingsSection section = (AppSettingsSection)config.GetSection("appSettings");
                string valueSettingSendMail = section.Settings["sendMailAuditByMail"].Value;

                if(valueSettingSendMail == "true")
                    SendMail("Error :: Auditoria", ConfigurationManager.AppSettings["MailToError"], "-" + Message);

Sean felices! :) Y siéntanse libres de opinar ;)

Una opción para manejar DateTime "nulos" en c#

A veces necesitamos manejar Datetime NULOS.

Pero por cosas de la vida, nuestro codigo todo esta lleno de DateTime... así que nos parece complicado manejar el tipo de dato DateTime?, que permite nulos por defecto. Hacer ese cambio nos da pereza... además de que podría traer algunos inconvenientes al algún tipo servicio o lo que sea.

Así para mi la mejor opción fue manejar el "NULO" que no es NULO....

Un DateTime cuando se crea deja por defecto una fecha, esta es:

01/01/0001 12:00:00 a.m.

Eso quiere decir que podríamos interpretar ese valor como el NULO.

¿Y como lo vamos a comparar?
Podremos en ese caso utilizar la siguiente validación que me parece bastante leíble por cualquier programador.

if (miObjetoDateTime != default(DateTime))
{
}

¿Y para los procedimientos almacenados como le envío el nulo? Porque verdaderamente hay si queremos enviarle un NULO de verdad.

Sería hacer la siguiente instrucción:

if (miObjetoDateTime != default(DateTime))
                this._sqlDatabase.AddInParameter(command, "parametrofechaquizasnula", DbType.DateTime, miObjetoDateTime);

            else

                this._sqlDatabase.AddInParameter(command, "parametrofechaquizasnula", DbType.DateTime, DBNull.Value);

Bueno, pues quizás sea la que a mi gusto más se me ajusta a mis necesidades.

Espero les sirva.

Sean felices! :) Y siéntanse libres de opinar ;)

Jquery AutoComplete con Web Forms C#

Este es el código para realizar autocomplete con web forms y C#.

JQUERY:


$("#idtextbox").autocomplete({
                    source: function (request, response) {
                        $.ajax({
                            url: "testpso.aspx/GetProveedoresAutocomplete",
                            data: "{ 'palabrabusqueda': '" + request.term + "' }",
                            dataType: "json",
                            type: "POST",
                            contentType: "application/json; charset=utf-8",
                            dataFilter: function (data) { return data; },
                            success: function (data) {
                                response($.map(data.d, function (item) {
                                    return {
                                        value: item
                                    }
                                }))
                            },
                            error: function (XMLHttpRequest, textStatus, errorThrown) {
                                alert(textStatus);
                            }
                        });
                    },
                    minLength: 2
                });


C# (en el aspx.cs)


[System.Web.Services.WebMethod]
    public static string[] GetProveedoresAutocomplete(string palabrabusqueda)
    {
        
        List<string> datos = new List<string>();
        datos.Add("jamer0"); 
        datos.Add("jamer1");
        datos.Add("jamer2");
        datos.Add("jamer3");
        datos.Add("jamer4");
        datos.Add("jamer5");
        
        return datos.ToArray();

    }



Espero les sirva.

Sean felices! :) Y sientanse libres de opinar ;)

Redirect 301 con c# y global.asax

Para hacer el redirect 301 con c#, se utiliza el siguiente código:


 void Application_BeginRequest(object sender, EventArgs e)
    {
        string host = Request.Url.Host;
        if (host.ToLower().IndexOf("dominioantiguo.com") != -1)
        {
            HttpContext.Current.Response.Status = "301 Moved Permanently";
HttpContext.Current.Response.AddHeader("Location", Request.Url.ToString().ToLower().Replace("http://dominioantiguo.com", "http://www.nuevodominio.com"));
            
        }
    }     


Espero les sirva.

Sean felices! :) Y sientanse libres de opinar ;)

Primera letra en mayúscula con c#

Esta es la función c# para traer la primera letra en mayúscula de un string.

//función

private string primeraLetraenMayuscula(string s)
    {
        if (string.IsNullOrEmpty(s))
        {
            return string.Empty;
        }
        return char.ToUpper(s[0]) + s.Substring(1);
    }


//uso
primeraLetraenMayuscula(mistring.ToLower());

Ojo que olvidemos primero hacer el lower.

Espero les sirva.

Sean felices! :) Y sientanse libres de opinar ;)

Obtener URL completa con directorio virtual con c#

Este es el código:


HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpContext.Current.Request.ApplicationPath;


Sean felices! :) Y sientanse libres de opinar ;)

No puede haber varios elementos seleccionados en DropDownList

Para esto: No puede haber varios elementos seleccionados en DropDownList

Lo que hago es:


ddltipoidentificacion.SelectedIndex = -1;

ddltipoidentificacion.Items.FindByValue("valuequeyotengo").Selected = true;


Como notan ya saben cual es la clave.


Sean felices! :) Y sientanse libres de opinar ;)

Llamar función de servidor con retorno desde jquery con ajax

Quizás necesitemos hacer un llamado ajax desde nuestro código de jquery por x o y razón... aquí esta en ejemplo:

Este es el codigo en jquery:


function asyncServerCall(ciudad) {
            jQuery.ajax({
                url: 'miaspx.aspx/MiFuncionLlamadaServidor',
                type: "POST",
                data: "{'ciudad':'" + ciudad + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    alert(data.d);
                }

            });
        }

Y este es el código en el lado del servidor en miaspx.cs:


[WebMethod()]
    public static string MiFuncionLlamadaServidor(string ciudad)
    {
        string consultatiendas = "prueba";

         return consultatiendas;
    }





Sean felices! :) Y sientanse libres de opinar ;)

Palabras Clave

.NET (93) AJAX (2) ajaxcontroltoolkit (2) Algoritmos (1) android (1) Angular (1) Arrays (1) AS2 o ActionScript 2.0 (1) AS3 o ActionScript 3.0 (64) ASP (7) ASP.NET (3) Azure (1) Azure DevOps (2) Backup (2) Batch (4) blogger (1) Browser Support (2) C# (53) Charts (1) Chorme extensions (1) Chrome (3) cmd (18) código postal (1) Colombia tips (1) command (1) Conexion remota (1) Controles Web .NET (24) Cookies (1) cordova (1) CSS (14) CSV (5) Cufon (1) DateTime (2) deployment (2) Desarrollo movil (2) Desarrollo web (5) Diseño (4) DNN o DotNetNuke (5) docker (1) Encuestas (1) Entity Framework (1) Error (1) Eval (2) Excel (4) Expresiones regulares (2) Facebook (14) fechas (1) Fiddler (1) FileUpload (1) Filezilla (1) Firefox (2) Flash (9) Fonts (3) FQL (1) frameworks (2) Futuro de la web (1) git (1) Google Code (13) Google Maps (4) hackintosh (3) hazard 10.6.2 (3) herramientas para developers (1) highchart (1) Hilos (2) Hosting Windows (18) HTML (38) HTML5 (6) IDE (1) IE (2) IE9 (1) IIS (13) imagenes (3) jasmine (2) java (1) jqgrid (2) Jquery y Javascript (90) jquery-ui (5) jQueryMobile (1) JSON (1) knockout (4) library (1) Link Interesantes (2) List (1) Macro (2) Matemáticas (2) Membership (6) Memoria (1) Mis Experiencias (3) momentjs (1) ms-dos (1) MSN (1) MVC (1) MVC4 (3) MySQL (2) node.js (4) Notepad++ (3) Notificaciones (1) ObjectDataSource (2) Online (2) Opinión (4) OSX (3) Parallels Plesk Panel (1) petapoco (1) PhantomJS (1) PHP (4) Porqué este blog (1) Powershell (1) Razor (3) Redes (2) REGEX (4) REST (1) SDK Android (1) Seguridad (1) SelectParameters (1) Selenium (2) sencha (3) sencha cmd (2) SEO (1) SMTP (2) Software útil (8) Solución (1) Soporte (1) SQL (15) SQL Server (58) SQLite (2) Store Procedures (20) String (5) Testing Code (2) texto (2) tips de datos (1) tips de desarrollo (1) TutoFaceAS3 (4) TutoProAS3 (4) Tutoriales (7) Tweenlite effects (3) Últimas noticias (1) unit testing (1) usb (1) VBA (1) Video (1) virus (1) Web API (2) Web Browsers (1) Web Forms (7) web.config (1) Webmaster (8) Webmatrix (1) webrole (1) webservices (1) webstorm (1) Win Forms (5) Windows (21) Windows 7 (1) Windows 8 (1) XML (2) Youtube API (2)