Como enviar un SMS desde Easy SMPP con Vb.Net (ejemplo)

He desarrollado una aplicación para envio de anuncios a través de SMS por lo que descargue easysmpp para efectuar esta labor.

Depués de un rato no pude encontrar un ejemplo del código al final pude armar la estructura y enviar el SMS.

Se debe primero registrar las tres librerías dll que vienen en el folder “tester”.

Seguidamente configurar en el page load la información del servidor de envio

Dim smppobj As New EasySMPP.SMSC
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
smppobj.SystemId = “ID”
smppobj.Password = “password”
smppobj.Port = “puerto”
smppobj.Host = “IP”
smppobj.Description = “TEST”
smppobj.SystemType = “test”
smppobj.AddrNpi = “0″
smppobj.AddrTon = “0″

End Sub

Para el envio del mensaje en podemos hacer un pequeño form que tenga un textbox y un botón de envio por lo que quedaría así:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
smppsend.AddSMSC(smppobj)
smppsend.Connect()
smppsend.SendSms(“50760060461″, “50760060461″, i_texto.Text)
smppsend.Disconnect()
End Sub

Espero le sea de utiliadad.

Cómo mostrar una imagen (gif) de procesando en asp.net

Realicé una aplicación que dependiendo del número de registros que debía procesar tomaba cierto tiempo en dar respuesta por lo que los usuarios se desesperaban.
La solución fue agregar una imagen (gif) de procesando mientras esto ocurria.
Para esto debemos colocar lo siguiente en el código aspx:

<span id=’procesando_div’ style=’display: none; position:absolute; text-align:center’>
<img src=” id=’procesando_gif’ align=’center’ />
</span>

Luego en el botón o link que activa el procedimiento que causa la demora agregamos:

<asp:Button ID=”btn_salvar” runat=”server” CssClass=”recuadro” Text=”Salvar” OnClientClick=”mostrar_procesar();” />

En el HEAD debemos agregar la función javascript que muestra la imagen de procesando:

<script type=’text/javascript’ language=’javascript’>
function mostrar_procesar()
{
document.getElementById(‘procesando_div’).style.display =”";
setTimeout(‘document.images["procesando_gif"].src=”images/ajax-loader.gif”‘, 200);
}
</script>

Si no poseen de un Gif animado que muestre “procesando” pueden generar uno en esta dirección ajax-loader

Cómo especificar MaxLength en MultiLine en asp.NET

Como muchos ya abran notado el atributo MaxLength no funciona en textbox que esten en modo MultiLine.
Para solucionar este inconveniente debemos agregar un javascript que controle automáticamente el largo del elemento.

En el textbox agregamos:

<asp:TextBox ID=”i_texto” runat=”server” Width=”600px” MaxLength=”160″
TextMode=”MultiLine”  onKeyUp=”maximo_largo()”></asp:TextBox>

Luego en el HEAD creamos la función javascript “maximo_largo

<script type=’text/javascript’ language=’javascript’>
function maximo_largo()
{
var texto;
texto = document.getElementById(‘ctl00_ContentPlaceHolder1_i_texto’).value;
if(texto.length>160)
{
document.getElementById(‘ctl00_ContentPlaceHolder1_i_texto’).value = texto.substring(0,160);
}

</script>

El largo lo especificamos cambiando el valor en el if(texto.length) > “valor máximo deseado”

Como usar topmargin y leftmargin en Firefox

Como habrán notado los atributos topmargin y leftmargin aplicados en la etiqueta no funcionan en Firefox ya que los mismos son nativos de IE.

La solución es muy sencilla para un topmargin=0 y leftmargin=3
Solución 1-En la etiqueta <body> agregas

style=”margin: 0px 0px 3px;”

Solución 2-Dentro de <HEAD> agregas

<style>
body {margin: 0px 0px; 3px;}
</style>

Cómo detectar y diferenciar un blackberry browser en asp.net

Al crear una aplicación en un intranet me topé con la necesidad de crear una versión de la intranet para ser accedidad por blackberry.

Después de investigar un poco me topé con esta solución:
En el evento load identifico el browser con:

If Request.UserAgent.Contains(“BlackBerry”) Then
Response.Redirect(“bb_site.aspx”)
Else
Response.Redirect(“site.aspx”)
End If

Espero le sea de utilidad.

Cómo verificar si un servicio de windows esta trabajando (started) en vb.net

Al desarrollar un robot que rastrea un sitio web y extra la información para luego ingresarla en una base de datos, me tope con la necesidad de tener un monitor que me permitiera verificar que el servicio esté funcionando o trabajando.
Para verificarlo uso la siguiente función:

Function verificarservicio(ByVal servicionombre As String) As Boolean

Dim miSC As ServiceProcess.ServiceController
miSC = New ServiceProcess.ServiceController(servicionombre)
If miSC.Status = ServiceProcess.ServiceControllerStatus.Stopped Then
‘ no trabaja
Return False
ElseIf miSC.Status = ServiceProcess.ServiceControllerStatus.Running Then
‘ funcionando correctamente
Return True
End If
End Function

¿Cómo usar UpdatePanels? Explicado para humanos

Los UpdatePanels son extensiones de AJAX que sirven para realizar operaciones asyncronicamente, es decir que no se neceista hacer un postback de la pagina para realizar alguna funcion.

Hace poco desarrollé una aplicacion de chat en asp.net con C# y necesitaba que los mensajes conforme iban siendo enviados se mostraran en la pantalla, pero no me podia dar el lujo de estar haciendo postback para esto, entonces decidi usar UpdatePanels y me puse a investigar en internet como usarlos, pero todo lo que encontraba parecia escrito en otro idioma. Al final logré entenderlos y ahora se los voy a explicar de forma sencilla.

Los UpdatePanels se conforman de 2 partes principales: ContentTemplate Triggers. Los ContentTemplate es donde van todos los controles que no queremos que hagan postback. Y los Triggers son los controles que queremos que disparen los eventos.

Veamos el codigo .aspx:

Primero que todo necesitamos un ScriptManager:

<asp:ScriptManager ID=”script” runat=”server” EnablePartialRendering=”true”>
</asp:ScriptManager>

Es importante que pongamos el EnablePartialRengering en true.

Agregaremos un boton :

<asp:Button ID=”btn” runat=”server” Text=”Actualizar Adentro” />

Luego agregamos el UpdatePanel:

<asp:UpdatePanel ID=”up” runat=”server” UpdateMode=”Conditional”>

Aquí debemos ponel el UpdateMode en Conditional.

Ahora creamos el ContentTemplate y ponemos los controles que queremos (en este caso pondre solamente un label):

<ContentTemplate>
<fieldset>
<asp:Label ID=”lbl” runat=”server” Text=”Label”></asp:Label>
</fieldset>
</ContentTemplate>

Luego de los controles tenemos que agregar los Triggers (en este caso pondré al boton que agrgamos al principio como un trigger):

<Triggers>
<asp:AsyncPostBackTrigger ControlID=”btn” EventName=”Click” />
</Triggers>

Al ser un botón, el evento que queremos capturar es el click.

Por últimos cerramos el UpdatePanel:

</asp:UpdatePanel>

Para este ejemplo agregaremos dos controles mas, un Label y otro Botón (afuera del UpdatePanel):

<asp:Label ID=”lbl2” runat=”server” Text=”Label”></asp:Label><br />
<asp:Button ID=”btn2” runat=”server” Text=”Actualizar Ambos” />

Ahora veamos el codebehind (.cs):

Lo que queremos hacer en este ejemplo es que al cargarse la página los labels muestren la hora en que fueron cargados, para esto agregamos el siguiente codigo en el Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
lbl.Text = “adentro: ” + DateTime.Now.ToLongTimeString();
lbl2.Text = “afuera: ” + DateTime.Now.ToLongTimeString();
}

Al cargar la página por primera vez los dos labels deberían mostrar la misma hora, pero al hacer click en el botón que dice Actualizar Adentro debería cambiar solamente la hora del Label que pusismos en el UpdatePanel, ya que este boton lo tenemos como un trigger del UpdatePanel. Y al hacer click en el botón que dice Actualizar Ambos los dos deberian tomar nuevamente la hora actual, ya que este boton genera un postback completo de la página.

Espero que esta información les sea útil y si no entienden algo, estoy a sus ordenes para resolver cualquier duda.

Codigo: Aqui

¿Cómo cambiar el texto de un boton con javascript y cómo hacerlo con asp.net?

Para enseñarles esto les voy a mostrar un pequeño ejemplo. Digamos que tenemos un boton y queremos que al hacerle clic cambie a un texto y al volver a clikearlo vuelva a su texto anterior. Primero veremos como hacerlo con Javascript: Escribimos la funcion que hara el cambio:

<script type=”text/javascript>

var ctr = 0 //esta es una variable de control.

function cambiar() { If(var = 0){

$get(‘btn’).value = ‘Cerrar’; ctr = 1;

}

else{

$get(‘btn’).value = ‘Abrir’; ctr = 0;

}

</script>

Luego creamos el boton(esto va despues de la etiqueta body):

<input type=”button” id=”btn” value=”Abrir” onclick=”cambiar();” />

Al hacer click en el boton, este debe cambiar su texto de: Abrir a Cerrar y viceversa. Ahora veamos como hacerlo con asp.net y c#.

En el codigo .aspx agregamos un boton y le ponemos un ID (en este caso le pondre btn) :

<asp:Button ID=”btn” runat=”server” Text=”Abrir” OnClick=”btn_Click” />

Y en el codebehind (.cs):

protected void btn_Click(object sender, EventArgs e)
{
int ctr = 0;
If (ctr == 0)
{
btn.Text = “Cerrar”;
ctr = 1;
}

else
{
btn.Text = “Abrir”;
ctr = 0;
}
}

Y de esta forma podemos hacer lo mismo, solo q con eventos de parte del servidor…
Comenten si les sirvio o si tienen alguna duda.

Cómo crear un Servicio de Windows (windows services) con vb.net

Si es necesario ejecutar un proceso continuamente la mejor solución es un servicio de windows que se ejecute cada cierto tiempo.

Para crear esto debemos irnos a crear un nuevo proyecto:

Una vez hemos creado el proyecto procedemos a incluir un componente tipo “eventlog” que nos permitirá registrar los eventos que el servicio ejecute.

Damos “double click” para ver el código y en antes de cualquier funcion

Private oTimer As System.Threading.Timer

En el “OnStart” incluimos lo siguiente:

Dim oCallback As New TimerCallback(AddressOf nombre_funcion)
oTimer = New System.Threading.Timer(oCallback, Nothing, 60000, 60000)
EventLog1.WriteEntry(“In OnStart”)

El 60000 representa que el timer se ejecutará cada minuto.

Creamos la siguiente función de inicialización

Public Sub New()
MyBase.New()
InitializeComponent()
EventLog1.Source = “Nombre del Servicio”
EventLog1.Log = “”
End Sub

En la vista “Design” le damos boton derecho y seleccionamos “Add Installer”

Una vez creado selecciona el Serviceinstaller1 y en propiedades cambia el nombre y display name por los que quieres que se vean en el listado de servicios.

En servicesprocessinstaller1 cambia account a Localsystem.

Una vez hecho esto le damos “build” y creamos el ejecutable

INSTALANDO EL SERVICIO

Para instalar el servicio debes usar el installUtil del Framework el cual puedes encontrar en windows\microsoft.net\framework\version utilizada

El comando que debes utilizar es installUtil “ruta del ejecutable”

Una vez completado solo inicia el sevicio en el área administrativa del panel de control

Cómo acceder URL con certificado no valido

Realizando un “robot” que accede un URL utilizando Net.HttpWebRequest sobre https que no tiene un certificado de una autoridad certificadora me tope con el siguiente error:
System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.

Solución:

Sólo se debe agregar la siguiente línea.

ServicePointManager.ServerCertificateValidationCallback = Function(sender As Object, certificate As X509Certificate, chain As X509Chain, sslPolicyErrors As System.Net.Security.SslPolicyErrors) True

Es importante agregar los siguientes includes:

Imports System.Security.Cryptography.X509Certificates
Imports System.Net.Security.SslPolicyErrors