 | Hola , que tal? Este post es un tip, no es un tutorial, pero va servir, hace poco tuve que conectarme desde ASP.NET a un Servicio Web que estaba construido con ColdFusión, y el clásico y cómodo método de Agregar Referencia Web no es compatible, lo que debemos hacer es utilizar la clases HTTPRequest Existe poca documentación y ejemplos sobre el tema. Fue mi Amigo y Maestro Mauricio Gómez que me ayudó a resolver el problema. Es importante contar con el WSDL para obtener el SOAP Envolpe, para eso puedes ocupar un cliente Soap Genérico |
http://www.soapclient.com/soaptest.html
Con esto vamos a obtener el SOAP Env, y hacemos una función para crear el “envoltorio SOAP” que envolverá nuestro mensaje:
Private Function GetSoapString2() As String
Dim soapRequest As New StringBuilder("")
soapRequest.Append("<SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:apachesoap=""http://xml.apache.org/xml-soap"" xmlns:impl=""http://ws"" xmlns:intf=""http://ws"" xmlns:soapenc=""http://schemas.xmlsoap.org/soap/encoding/"" xmlns:tns1=""http://rpc.xml.coldfusion"" xmlns:wsdl=""http://schemas.xmlsoap.org/wsdl/"" xmlns:wsdlsoap=""http://schemas.xmlsoap.org/wsdl/soap/"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">")
soapRequest.Append("<SOAP-ENV:Body>")
soapRequest.Append("<mns:WebMethod xmlns:mns=""http://ws"" SOAP-ENV:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/"">")
soapRequest.Append("<xmlSet xsi:type=""xsd:string"">{0}</xmlSet>")
soapRequest.Append("</mns:WebMethod>")
soapRequest.Append("</SOAP-ENV:Body>")
soapRequest.Append("</SOAP-ENV:Envelope>")
Return soapRequest.ToString()
End Function
La clave acá es: soapRequest.Append("<xmlSet xsi:type=""xsd:string"">{0}</xmlSet>"), que nos va a servir al momento de “Envolver”
Public Function CrearLlamadaWS(ByVal ServiceUri As String, ByVal requestXmlString As String) As String
Dim httpRequest As HttpWebRequest = WebRequest.Create(ServiceUri)
Dim myWriter As StreamWriter
Dim result As String = String.Empty
If Not httpRequest Is Nothing Then
httpRequest.Method = "POST"
httpRequest.ContentLength = 1049
httpRequest.ContentType = "text/xml; charset=""utf-8"""
httpRequest.Timeout = 60000
httpRequest.Headers.Add("SOAPAction", "")
myWriter = New StreamWriter(httpRequest.GetRequestStream())
Dim xx As String = String.Format(Me.GetSoapString2(), requestXmlString)
myWriter.Write(xx)
If Not myWriter Is Nothing Then
myWriter.Close()
End If
Dim objResponse As HttpWebResponse
Dim esr As StreamReader
Try
objResponse = httpRequest.GetResponse()
Catch ex As WebException 'Exception
esr = New StreamReader(ex.Response.GetResponseStream())
result = esr.ReadToEnd()
Catch ex As Exception
objResponse = Nothing
Throw
End Try
Dim sr As StreamReader
sr = New StreamReader(objResponse.GetResponseStream())
result = sr.ReadToEnd()
sr.Close()
objResponse.Close()
sr.Close()
objResponse = Nothing
sr = Nothing
httpRequest.Abort()
End If
httpRequest = Nothing
myWriter = Nothing
Return result
End Function
Luego hacemos la llamada:
Dim request As String = "<![CDATA[<misdatos></misdatos>]]>"
MakeWebServiceCall(“http://10.0.0.1/ws/test.cfc?method=WebMethod”, request)
En la mayoria de los casos, el argumento, aunque nos indican que es un XML, en realidad es “en formato XML” pero no un XML propiamente tal, si no que un String:
soapRequest.Append("<xmlSet xsi:type=""xsd:string"">{0}</xmlSet>")
La llamada es entonces, la hacemos con la URL, que incluye en nombre el WebMethod, y luego el xml con CDATA ya que en realidad es un String.
Vuelvo a dar las gracias a Mauricio Gómez, por ayudarme y por querer compartir esta información 
Espero que te sirva,
Saludos,
Chalalo

¡Internet Explorer 9 está disponible!
Internet Explorer 9 Beta ya está aquí para que puedas comenzar a desarrollar. Más velocidad, interoperabilidad y belleza para que tus sitios brillen en Internet. Construido sobre HTML 5, provee un entorno interoperable que te permitirá diseñar fácilmente aplicaciones y páginas web ricas en gráficos y altamente funcionales. Ingresa ahora a www.labellezadeinternet.com y empieza ya mismo a experimentar las nuevas características, entre las cuales se destacan:
+ Velocidad: La aceleración de gráficos por GPU permite aprovechar completamente la capacidad del equipo. El procesador de gráficos, posibilita la mejor visualización de videos en alta definición y la carga rápida de contenidos. Junto al nuevo motor de JavaScript, provee un rendimiento optimizado, que significa más rapidez.
+ Interoperabilidad: Olvídate de escribir el mismo sitio más de una vez o de crear prefijos de navegación para navegadores específicos, gracias al soporte de HTML5 y CSS3, y a la compatibilidad con estándares internacionales como WC3.
+ Belleza: Una interfaz de usuario con un diseño limpio que permite visualizar más contenido de los sitios web, abrir y organizar pestañas fácilmente entre muchas características que mejoran la navegación, como la gestión de descargas; la integración con Windows posibilita anclar sitios web en la barra de herramientas, utilizar JumpLists, arrastrar pestañas con Aero Snap: los sitios web se comportan como programas instalados en el equipo.
En la Guía para desarrolladores de Internet Explorer 9 Beta, encontrarás muchísima información detallada sobre estas características y temas como SGV, DOM, EMAScript5 y más. Puedes encontrar más herramientas en MSDN. Y si ya has empezado a trabajar ¡Prueba lo que sabes!
Además incluye una excelente herramienta para los desarrolladores, en donde podremos ver como se van cargando nuestros componentes de la página, solo presiona f12 y comienza a analizar!.

Saludos,
Gonzalo

Link:http://www.f1code.cl/
Tengo el agrado de participar en esta gran comunidad de Profesores, que como dice el título, están al servicio de las preguntas de programación de los Alumnos, tal como dice el gestor de esta iniciativa Luis Lastra:
F1{code} es una idea que nace de la necesidad de tener un lugar donde poder consultar, como estudiante, las dudas que se presentan en programación al momento de cursar las carreras relacionadas con el área de la Computación e Informática. ¿Alguna vez te haz encontrado con un error en tu tarea de programación en un lenguaje determinado el cual no puedes solucionar?, ¿Tienes alguna duda de porque funciona una parte de tu código y realmente no comprendes el “por que”?, ¿Warnings por doquier al momento de generar tu tarea y quieres aprender a eliminarlos?, ¿No sabes como abordar un problema y necesitas una manito? Estás en el lugar correcto. F1{code} es el sitio donde podrás preguntar todas tus dudas, las cuales, serán respondidas por un grupo de computines por default, entre los que se encuentran Docentes de distintas Instituciones Educacionales Chilenas, estudiantes de excelencia y profesionales del área con años de experiencia. La idea es sencilla, ayudar a aprender en un lugar en el que sea fácil consultar y en el que se pueda buscar entre todas las consultas anteriores una posible respuesta a tu situación. El conocimiento de uno es el conocimiento de todos.
Cabe destacar que F1{code} no es el sitio donde te “haremos la tarea“, sino que, es el lugar donde intentaremos ayudar a liberarte de las dudas y problemas que puedas tener en tu vida de estudiante computín. Cabe destacar que el tiempo de respuesta va en directa relación con el tiempo disponible de nuestro equipo, por lo que no intentes hacer una pregunta el día antes o el mismo día del deadline, puede que no tengas suerte hasta después del plazo.
Sean bienvenidos!
Equipo F1{code}
Ahora bien, los docentes y colaboradores de este grupo son gente que tiene pedagogía en las venas, no te van a enviar un link, si no a explicar lo que estas haciendo de manera incorrecta o en que mejorar. (link a la página de colaboradores: http://www.f1code.cl/?page_id=8)
Puedes hacer preguntas de Python, PHP, ASP.NET, C#, VB.NET, C, C++, JavaScript entre otros, también sobre conceptos de materia.
Así que si tienes una duda te invito a que revises la página:

Saludos!
Gonzalo
Hola!, ha pasado un tiempo sin postear, lamentablemente he estado súper corto de tiempo, pero sin embargo quiero compartir algo con ustedes.
Hace un tiempo un buen amigo mío me comentó la inquietud de hacer algo con google maps, para distintos dispositivos, lo que me pareció bastante interesante. El tema es que me desperté con ese bicho de programar y leer documentación así que , antes que te aburras leyendo esto, te muestro el ejemplo final en un video para que te entusiasmes.
Como vez, vamos a mostrar las panaderías cercanas, pero con nuestra información, la que esta almacenada en una Base de Datos y mediante un WS vamos a obtener estos datos para mostrarlos en el mapa y además, vamos a agregar una leyenda para cada uno de estos puntos
Revisemos los pasos a seguir para obtener este resultado…
Paso 1: Obtener el Key desde google Map
Debes obtenerlo desde la siguiente URL: API key for Google Maps , debes contar con una cuenta en gmail, y registrar de que servidor vas a utilizar esta API (no necesario para probar en Localhost). Luego vas a obtener la key , que con la cual tienes que hacer referencia a la API.
En mi caso:
<script src="http://maps.google.com/maps?file=api&v=2&sensor=true&key=ABQIAAAA3e9bpW5mHEGS7LVaB4R-3BQx6TWrfC8bNfnC-vtzzHJYkwhD6xTwJS9V3UI-UBnyi98SwuzCxumFSw" type="text/javascript"></script>
<script src="jquery-1.4.1.min.js" type="text/javascript"></script>
Paso 2: Crear el div para el mapa
<body>
<div id="map_canvas" style="width: 580px; height: 381px">
</div>
<ul id="list">
</ul>
</body>
Este va a ser el contenedor de nuestro mapa, además tenemos un tag ul para mostrar los puntos que vamos a marcar.
Paso 3: Crear el Código JavaScript
Luego viendo la documentación de la Api, vamos a configurar las siguientes características:
Icono de Marca Personalizado
$(document).ready(function () {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(-36.809731, -73.042903), 15);
map.setUIToDefault();
var baseIcon = new GIcon(G_DEFAULT_ICON);
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
getMarkersWS(map);
}
Esta es la primera parte con esto instanciamos el mapa y lo asignamos al div que tenemos en el body. También damos las coordenadas para ubicar inicialmente el mapa (-36.809731, -73.042903), que es la ciudad donde vivo, y el zoom ,en este caso 15.
Para buscar tu ubicación, utiliza http://itouchmap.com/latlong.html
Luego vamos a modificar el icono partiendo de la base del icono por defecto, cambiamos la sombra y el tamaño, y como veremos, vamos a modificar con la función createMarker, que recibe el punto, y el html a imprimir, el icono sobre la marca.
function createMarker(point, htmlVentana) {
var Icon = new GIcon(baseIcon);
Icon.image = "empanadas.png";
markerOptions = { icon: Icon };
var marker = new GMarker(point, markerOptions);
GEvent.addListener(marker, "click", function () {
marker.openInfoWindowHtml(htmlVentana);
});
return marker;
}
Como comentaba antes, esta función se va a encargar de dibujar la marca, asignar además una ventana de información sobre la misma, asociada al evento click.
El ícono que elejí es la de una empanada, ya que es una comida típica Chilena y estamos celebrando el Bicentenario de mi Pais
.
![image[3] image[3]](http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image3_5F00_thumb_5F00_0244C7AE.png)
La ventana a la que le pasamos la variable (htmlVentana), se va a mostrar sobre el marker:
Obviamente, los datos son obtenidos desde la base de datos.
Paso 4: Crear la Base de Datos.
Creamos una tabla Panaderías, con la siguiente estructura:
Con los Datos:

Para hacerla como dice Pablo Campos “Short & Good”, voy a crear un modelo LinqToSql para el manejo de datos:

Agregamos el WebService y codificamos la función GetPanaderias() que devuelve una lista de Objetos PanaderiaItem.
<WebMethod()> _
Public Function GetPanaderias() As List(Of PanaderiaItem)
Dim Items As New List(Of PanaderiaItem)
Dim modelo As New ModeloDataContext
Dim lista = From p In modelo.Panaderias
For Each p As Panaderia In lista
Items.Add(New PanaderiaItem With {.nombre = p.nombre, _
.direccion = p.direccion, _
.precio = p.precio, _
.descripcion = p.descripcion, _
.foto = p.foto, _
.lng = p.Lng.ToString, _
.lat = p.Lat.ToString})
Next
Return Items
End Function
Public Class PanaderiaItem
Public nombre As String
Public direccion As String
Public precio As Integer
Public descripcion As String
Public foto As String
Public lng As String
Public lat As String
End Class
Paso 5: Obtener los datos del WebService:
Vamos a crear un WebService que nos permita recuperar los datos mediante JSON:
function getMarkersWS(map) {
$.ajax({
type: "POST",
url: "MiWebService.asmx/GetPanaderias",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var panaderias = response.d;
$.each(panaderias, function (index, pan) {
var point = new GLatLng(pan.lng, pan.lat);
var htmlVentana = "<img src='fotos/" + pan.foto + "'><br> Panadería:" + pan.nombre + "</b><br><i>Precio:" + pan.precio + "</i><br>Direccion:" + pan.direccion;
var marker = createMarker(point, htmlVentana);
map.addOverlay(marker);
$("<li />").html(pan.nombre + " " + pan.direccion + " <b>" + pan.precio + "</b>").click(function () {
marker.openInfoWindowHtml(htmlVentana);
}).appendTo("#list");
});
},
failure: function (msg) {
alert(msg);
}
}); //fin llamada ajax
} //fin funcion getMarkersWS
Como puedes ver el código , obtenemos los datos desde el WebService, mediante JSON, cuando ocurre el ok (success), y vamos recorriendo la colección de Objetos que nos devuelve el WS con la función $.each de Jquery
$.each(panaderias, function (index, pan)
Luego armamos el punto (var point) y el mensaje HTML para pasarlo a la función createMarker. Luego vamos a dibujar el listado y vamos agregando el handlers click , para que al pinchar cada elemento, se muestre en el mapa el punto y la ventana. Gracias al encadenamiento de Jquery, podemos finalmente agregarlo al list (appendTo).
$("<li />").html(pan.nombre + " " + pan.direccion + " <b>" + pan.precio + "</b>").click(function () {
marker.openInfoWindowHtml(htmlVentana);
}).appendTo("#list");
Paso 6: El Proyecto Web.

Esta es la estructura de nuestro proyecto, como vez es bastante sencillo, y podemos lograr un sistema de seguimiento, por ejemplo refrescando de manera asíncrona los markers.

Recursos:
Documentación Api de Google:
http://code.google.com/intl/es-ES/apis/maps/index.html
Búscate en el Mapa
http://itouchmap.com/latlong.html
Descarga la aplicación 

Como siempre digo, espero que te sirva, y si sigues este blog, sorry que no haya posteado, pero creo que con esto me revindico
. Si no te funciona postea porfa, así nos ayudamos entre todos!
Saludos,
Gonzalo
PD: Esta manera es más práctico que marcar de esta manera:
