<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>THE .NET WAY &#187; WebServices</title>
	<atom:link href="http://www.thedotnetway.net/tag/webservices/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thedotnetway.net</link>
	<description>El blog Tecnológico de Emilio Torrens y Jordi Cladera</description>
	<lastBuildDate>Thu, 29 Jul 2010 08:27:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>XFire y Eclipse</title>
		<link>http://www.thedotnetway.net/2010/02/16/xfire-y-eclipse/</link>
		<comments>http://www.thedotnetway.net/2010/02/16/xfire-y-eclipse/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 09:23:04 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[WebServices]]></category>
		<category><![CDATA[WSDL]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/2010/02/16/xfire-y-eclipse/</guid>
		<description><![CDATA[XFire te permite generar el código necesario para un cliente de webservice a partir de su WSDL &#160; Para usarlo con Eclipse debes instalar el Plugin, para eso vas al menú Help/Install New Software le das a Add en Name le pones XFire y en location le pones esta dirección “http://dist.codehaus.org/xfire/update/”, Ok, Finish y ya [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://xfire.codehaus.org/" target="_blank">XFire</a> te permite generar el código necesario para un cliente de <a href="http://es.wikipedia.org/wiki/Servicio_web" target="_blank">webservice</a> a partir de su <a href="http://es.wikipedia.org/wiki/WSDL" target="_blank">WSDL</a></p>
<p><a href="http://www.thedotnetway.net/wp-content/uploads/2010/02/image.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://www.thedotnetway.net/wp-content/uploads/2010/02/image_thumb.png" width="152" height="90" /></a>&#160; Para usarlo con <a href="http://www.eclipse.org" target="_blank">Eclipse</a> debes instalar el Plugin, para eso vas al menú Help/Install New Software le das a Add en Name le pones XFire y en location le pones esta dirección “http://dist.codehaus.org/xfire/update/”, Ok, Finish y ya lo tienes instalado.</p>
<p><a href="http://www.thedotnetway.net/wp-content/uploads/2010/02/image1.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://www.thedotnetway.net/wp-content/uploads/2010/02/image_thumb1.png" width="149" height="109" /></a>&#160; Para usarlo vas al proyecto, New/Other, buscas el Wizard de XFire y allí solo tienes que poner la dirección del WSDL y donde quieres que te genere el código y listo.</p>
<p>Con estos pocos pasos ya tienes todas las clases necesarias para acatar el servicio, además con XFire no he tenido problemas con los WSDL de ningún servicio.</p>
<p>Es importante que añadas <a href="http://www.findjar.com/jar/commons-httpclient/jars/commons-httpclient-3.0.jar.html" target="_blank">commons-httpclient-3.0.jar</a> y <a href="http://www.findjar.com/jar/commons-codec/jars/commons-codec-1.3.jar.html" target="_blank">commons-codec.jar</a> al proyecto ya que XFire las necesita.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2010/02/16/xfire-y-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SoapHeader, SoapExtensions y Herencia</title>
		<link>http://www.thedotnetway.net/2009/12/03/soapheader-soapextensions-y-herencia/</link>
		<comments>http://www.thedotnetway.net/2009/12/03/soapheader-soapextensions-y-herencia/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 10:31:37 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Trucos]]></category>
		<category><![CDATA[WebServices]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/2009/12/03/soapheader-soapextensions-y-herencia/</guid>
		<description><![CDATA[Hace unos días Jordi escribió sobre las SoapExtensions y yo sobre las SoapHeaders, hoy le añadimos herencia y vemos como ahorrarnos bastante código y trabajo en una capa de servicios. La idea es que todos los métodos de todos los servicios web de la aplicación se autentifiquen en el mismo sitio y no tener que [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unos días Jordi escribió sobre las <a href="http://www.thedotnetway.net/2009/10/07/soap-extension/" target="_blank">SoapExtensions</a> y yo sobre las <a href="http://www.thedotnetway.net/2009/11/27/cabeceras-en-mensajes-soap/" target="_blank">SoapHeaders</a>, hoy le añadimos herencia y vemos como ahorrarnos bastante código y trabajo en una capa de servicios. <img src='http://www.thedotnetway.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>La idea es que todos los métodos de todos los servicios web de la aplicación se autentifiquen en el mismo sitio y no tener que poner el código de autentificación en cada método, además no queremos usar cookies ni mantenimiento de sesión.</p>
<p>Para esto usaremos una Cabecera Soap donde el cliente nos enviara Usuario y Contraseña, debemos crear la clase cabecera:</p>
<p><span style="color: blue">public class </span><span style="color: #2b91af">SoapHeaderCredentials </span>: <span style="color: #2b91af">SoapHeader      <br /></span>{     <br />&#160;&#160;&#160; <span style="color: blue">public string </span>Password = <span style="color: #a31515">&quot;&quot;</span>;     <br />&#160;&#160;&#160; <span style="color: blue">public string </span>UserName = <span style="color: #a31515">&quot;&quot;</span>;     <br />}</p>
<p> <a href="http://11011.net/software/vspaste"></a>
<p>Cada servicio web tiene que tener una propiedad con la Cabecera, para ahorrarnos el escribirlo cada vez, creamos una clase que herede de WebService, que contenga la propiedad y heredamos los servicios web de esa clase:</p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">MyWebService </span>: System.Web.Services.<span style="color: #2b91af">WebService
</span>{
    <span style="color: blue">public </span><span style="color: #2b91af">SoapHeaderCredentials </span>soapHeaderCredentials;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">Service </span>: <span style="color: #2b91af">MyWebService</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Después creamos una Extensión Soap de autentificación (en este caso la llamamos AuthenticationExtension), Jordi ya <a href="http://www.thedotnetway.net/2009/10/07/soap-extension/" target="_blank">explica aquí</a> como crearlas así que solo pongo el código que nos interesa, que es donde buscamos la Cabecera Soap en el Método ProcessMessage:</p>
<pre class="code"><span style="color: blue">case </span><span style="color: #2b91af">SoapMessageStage</span>.AfterDeserialize:
{
    <span style="color: blue">var </span>o = <span style="color: blue">from </span>h <span style="color: blue">in </span>message.Headers.Cast&lt;<span style="color: #2b91af">SoapHeader</span>&gt;()
            <span style="color: blue">where </span>h.GetType() == <span style="color: blue">typeof</span>(<span style="color: #2b91af">SoapHeaderCredentials</span>)
            <span style="color: blue">select </span>h ;
    <span style="color: #2b91af">SoapHeaderCredentials </span>soapHeaderCredentials =
        (<span style="color: #2b91af">SoapHeaderCredentials</span>) o.First();
    AuthenticateUser(
        <span style="color: blue">new </span><span style="color: #2b91af">Credentials</span>()
        {
          UserName = soapHeaderCredentials.UserName,
          Password = soapHeaderCredentials.Password,
        }, </pre>
<pre class="code">      );
    <span style="color: blue">break</span>;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a></p>
<p>Después solo queda añadir los dos atributos [SoapHeader(&quot;soapHeaderCredentials&quot;)]&#160; y [AuthenticationExtension()] a nuestros WebMethods, eso hará que los métodos tengan la cabecera de usuario y contraseña y que ejecuten el código de autentificación al recibir un mensaje:</p>
<pre class="code">[<span style="color: #2b91af">WebMethod</span>]
[<span style="color: #2b91af">SoapHeader</span>(<span style="color: #a31515">&quot;soapHeaderCredentials&quot;</span>)]
[<span style="color: #2b91af">AuthenticationExtension</span>()]
<span style="color: blue">public string </span>HelloWorld()
{
    <span style="color: blue">return </span><span style="color: #a31515">&quot;Hello World&quot;</span>;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Y listo <img src='http://www.thedotnetway.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2009/12/03/soapheader-soapextensions-y-herencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cabeceras en mensajes SOAP</title>
		<link>http://www.thedotnetway.net/2009/11/27/cabeceras-en-mensajes-soap/</link>
		<comments>http://www.thedotnetway.net/2009/11/27/cabeceras-en-mensajes-soap/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 12:38:14 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[WebServices]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/2009/11/27/cabeceras-en-mensajes-soap/</guid>
		<description><![CDATA[Añadir cabeceras personalizadas a los mensajes de nuestros servicios web es realmente sencillo, en esas cabeceras podemos transportar cualquier dato que nos interese tokens, usuario y contraseña, lo que sea.. Hay que hacer lo siguiente: 1- Crear la clase con los datos que herede de SoapHeader public class SoapHeaderData: SoapHeader { public string Data1; public [...]]]></description>
			<content:encoded><![CDATA[<p>Añadir cabeceras personalizadas a los mensajes de nuestros servicios web es realmente sencillo, en esas cabeceras podemos transportar cualquier dato que nos interese tokens, usuario y contraseña, lo que sea..</p>
<p>Hay que hacer lo siguiente:</p>
<p>1- Crear la clase con los datos que herede de SoapHeader</p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">SoapHeaderData</span>: <span style="color: #2b91af">SoapHeader
</span>{
    <span style="color: blue">public string </span>Data1;
    <span style="color: blue">public string </span>Data2;
    <span style="color: blue">public string </span>Data3;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a>2- Crear una propiedad en el servicio web con esa clase y la etiqueta SoapHeader con el nombre de la propiedad al método web, en esa propiedad tendremos los datos</p>
<pre class="code">[<span style="color: #2b91af">WebServiceBinding</span>(ConformsTo = <span style="color: #2b91af">WsiProfiles</span>.BasicProfile1_1)]
<span style="color: blue">public class </span><span style="color: #2b91af">Service </span>: System.Web.Services.<span style="color: #2b91af">WebService
</span>{
    <span style="color: blue">public </span><span style="color: #2b91af">SoapHeaderData </span>HeaderData;

    [<span style="color: #2b91af">WebMethod</span>]
    [<span style="color: #2b91af">SoapHeader</span>(<span style="color: #a31515">&quot;HeaderData&quot;</span>)]
    <span style="color: blue">public string </span>HelloWorld() {
        <span style="color: blue">return </span><span style="color: #a31515">&quot;Hello World &quot; </span>+ HeaderData.Data1 + <span style="color: #a31515">&quot;, &quot; </span>+
                                HeaderData.Data2 + <span style="color: #a31515">&quot;, &quot; </span>+
                                HeaderData.Data3;
    }
}</pre>
<p><a href="http://11011.net/software/vspaste"></a>Solo haciendo esto ya tenemos la cabecera en nuestra petición SOAP: </p>
<p><a href="http://www.thedotnetway.net/wp-content/uploads/2009/11/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.thedotnetway.net/wp-content/uploads/2009/11/image_thumb.png" width="474" height="238" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2009/11/27/cabeceras-en-mensajes-soap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generando clases en Java desde WSDL autogenerados (asmx)</title>
		<link>http://www.thedotnetway.net/2009/04/14/generando-clases-en-java-desde-wsdl-autogenerados-asmx/</link>
		<comments>http://www.thedotnetway.net/2009/04/14/generando-clases-en-java-desde-wsdl-autogenerados-asmx/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 15:05:30 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[WebServices]]></category>

		<guid isPermaLink="false">http://thedotnetway.wordpress.com/2009/04/14/generando-clases-en-java-desde-wsdl-autogenerados-asmx/</guid>
		<description><![CDATA[Tenemos un par de Clientes que usan Java y tienen que consumir los servicios web de nuestras aplicaciones (asmx), hemos tenido muchos problemas generando las clases desde Eclipse o el Intellij IDEA desde el wsdl autogenerado de los asmx. Al final hemos encontrado la solución, usar el XFIRE, usando ese framework de Java no hemos [...]]]></description>
			<content:encoded><![CDATA[<p>Tenemos un par de Clientes que usan Java y tienen que consumir los servicios web de nuestras aplicaciones (asmx), hemos tenido muchos problemas generando las clases desde Eclipse o el Intellij IDEA desde el wsdl autogenerado de los asmx.</p>
<p>Al final hemos encontrado la solución, usar el XFIRE, usando ese framework de Java no hemos tenido problemas</p>
<p>Aquí hay un quickstart de cómo utilizar el plugin en el Eclipse: </p>
<p><a href="http://xfire.codehaus.org/Eclipse+Plugin">http://xfire.codehaus.org/Eclipse+Plugin</a> </p>
<p>Documentación:</p>
<p><a href="http://xfire.codehaus.org/User's+Guide">http://xfire.codehaus.org/User&#8217;s+Guide</a> </p>
<p>Hay una nueva versión que se llama CXF</p>
<p> <a href="http://cxf.apache.org/">http://cxf.apache.org/</a>
<p>Aunque no la hemos probado, así que para ir sobre seguro usa o recomienda usar XFIRE</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2009/04/14/generando-clases-en-java-desde-wsdl-autogenerados-asmx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pasar Credenciales en Http Header Authorization</title>
		<link>http://www.thedotnetway.net/2008/11/27/pasar-credenciales-en-http-header-authorization/</link>
		<comments>http://www.thedotnetway.net/2008/11/27/pasar-credenciales-en-http-header-authorization/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 08:29:00 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[WebServices]]></category>

		<guid isPermaLink="false">http://thedotnetway.wordpress.com/2008/11/27/pasar-credenciales-en-http-header-authorization/</guid>
		<description><![CDATA[Me he estado volviendo medio loco estos días intentando conectar con el servicio de un tercero, la documentación no era todo lo clara que uno espera&#8230; Intente pasarle las Credenciales como NetworkCredentials en el HttpRequest y nada, añadiendo cabeceras de autentificación al mensaje SOAP y nada, al final las espera en una cabecera Http. ¿Como [...]]]></description>
			<content:encoded><![CDATA[<p>Me he estado volviendo medio loco estos días intentando conectar con el servicio de un tercero, la documentación no era todo lo clara que uno espera&#8230;</p>
<p>Intente pasarle las Credenciales como NetworkCredentials en el HttpRequest y nada, añadiendo cabeceras de autentificación al mensaje SOAP y nada, al final las espera en una cabecera Http.</p>
<p>¿Como se pasan allí? pues así:</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:e8070795-6a41-42ea-8b82-b2d0247b209e" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#FFFFFF;white-space:pre-wrap;overflow:auto;font-family:Microsoft Sans Serif;font-size:11px;"><span style="color:#000000;">HttpWebRequest req </span><span style="color:#000000;">=</span><span style="color:#000000;"> (HttpWebRequest)WebRequest.Create(</span><span style="color:#800000;">"</span><span style="color:#800000;">la url del servicio</span><span style="color:#800000;">"</span><span style="color:#000000;">);

req.Headers.Add(</span><span style="color:#800000;">"</span><span style="color:#800000;">SOAPAction</span><span style="color:#800000;">"</span><span style="color:#000000;">, </span><span style="color:#800000;">"</span><span style="color:#800000;">la accion</span><span style="color:#800000;">"</span><span style="color:#000000;">);
req.ContentType </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">application/soap+xml</span><span style="color:#800000;">"</span><span style="color:#000000;">;
req.Accept </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">text/xml</span><span style="color:#800000;">"</span><span style="color:#000000;">;
req.Method </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">POST</span><span style="color:#800000;">"</span><span style="color:#000000;">;
</span><span style="color:#0000FF;">byte</span><span style="color:#000000;">[] authBytes </span><span style="color:#000000;">=</span><span style="color:#000000;"> Encoding.UTF8.GetBytes((</span><span style="color:#800000;">"</span><span style="color:#800000;">Usuario:Pass</span><span style="color:#800000;">"</span><span style="color:#000000;">).ToCharArray());
req.Headers.Add(</span><span style="color:#800000;">"</span><span style="color:#800000;">Authorization</span><span style="color:#800000;">"</span><span style="color:#000000;">, </span><span style="color:#800000;">"</span><span style="color:#800000;">Basic </span><span style="color:#800000;">"</span><span style="color:#000000;"> </span><span style="color:#000000;">+</span><span style="color:#000000;"> Convert.ToBase64String(authBytes));       </span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p><span style="font-size:10pt;"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2008/11/27/pasar-credenciales-en-http-header-authorization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cliente SOAP para servicios PHP o Java AXIS</title>
		<link>http://www.thedotnetway.net/2008/04/14/cliente-soap-para-servicios-php-o-java-axis/</link>
		<comments>http://www.thedotnetway.net/2008/04/14/cliente-soap-para-servicios-php-o-java-axis/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 14:08:00 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[WebServices]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://thedotnetway.wordpress.com/2008/04/14/cliente-soap-para-servicios-php-o-java-axis/</guid>
		<description><![CDATA[Aquí dejo una clase para consumir servicios web vía SOAP en los que no tengamos el WSDL o que el Wizard nos de problemas: using System; using System.Text; using System.IO; using System.Net; using System.Xml; namespace Test { class SOAPClient { public static XmlDocument SendMsg(XmlDocument xmlRQ) { byte[] byte1; Stream myStream; StreamReader readStream; HttpWebRequest wr = [...]]]></description>
			<content:encoded><![CDATA[<p>Aquí dejo una clase para consumir servicios web vía SOAP en los que no tengamos el WSDL o que el Wizard nos de problemas: </p>
</p>
<div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:1642f31f-25a9-48f8-9a65-f0d8294f2ab1" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#FFFFFF;white-space:pre-wrap;overflow:auto;font-family:Microsoft Sans Serif;font-size:11px;"><span style="color:#0000FF;">using</span><span style="color:#000000;"> System;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Text;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.IO;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Net;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Xml;

</span><span style="color:#0000FF;">namespace</span><span style="color:#000000;"> Test
    {
    </span><span style="color:#0000FF;">class</span><span style="color:#000000;"> SOAPClient
        {

        </span><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">static</span><span style="color:#000000;"> XmlDocument SendMsg(XmlDocument xmlRQ)
            {
                </span><span style="color:#0000FF;">byte</span><span style="color:#000000;">[] byte1;
                Stream myStream;
                StreamReader readStream;

                HttpWebRequest wr </span><span style="color:#000000;">=</span><span style="color:#000000;">
                    (HttpWebRequest)WebRequest.
                    Create(</span><span style="color:#800000;">"</span><span style="color:#800000;">http://laurl.com/ws.php</span><span style="color:#800000;">"</span><span style="color:#000000;">);

                byte1 </span><span style="color:#000000;">=</span><span style="color:#000000;">
                Encoding.GetEncoding(</span><span style="color:#800080;">1252</span><span style="color:#000000;">).GetBytes(xmlRQ.OuterXml);
                wr.Method </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">POST</span><span style="color:#800000;">"</span><span style="color:#000000;">;
                wr.Headers.Add(</span><span style="color:#800000;">"</span><span style="color:#800000;">SOAPAction</span><span style="color:#800000;">"</span><span style="color:#000000;">, </span><span style="color:#800000;">""</span><span style="color:#000000;">);
                wr.ContentType </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">text/xml; charset=\"utf-8\"</span><span style="color:#800000;">"</span><span style="color:#000000;">;
                wr.Accept </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">text/xml</span><span style="color:#800000;">"</span><span style="color:#000000;">;

                myStream </span><span style="color:#000000;">=</span><span style="color:#000000;"> wr.GetRequestStream();
                myStream.Write(byte1, </span><span style="color:#800080;">0</span><span style="color:#000000;">, byte1.Length);
                myStream.Close();

                myStream </span><span style="color:#000000;">=</span><span style="color:#000000;"> wr.GetResponse().GetResponseStream();
                readStream </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> StreamReader(myStream);
                XmlDocument xmlDoc </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> XmlDocument();
                xmlDoc.Load(readStream);
                myStream.Close();

                </span><span style="color:#0000FF;">return</span><span style="color:#000000;"> getSOAPPayload(xmlDoc, </span><span style="color:#800000;">"</span><span style="color:#800000;">body</span><span style="color:#800000;">"</span><span style="color:#000000;">);
            }

          </span><span style="color:#0000FF;">private</span><span style="color:#000000;"> </span><span style="color:#0000FF;">static</span><span style="color:#000000;"> XmlDocument getSOAPPayload(XmlDocument rs,
                                                    </span><span style="color:#0000FF;">string</span><span style="color:#000000;"> Tag)
            {

                XmlNode xmlNode </span><span style="color:#000000;">=</span><span style="color:#000000;">
                    rs.GetElementsByTagName(Tag)[</span><span style="color:#800080;">0</span><span style="color:#000000;">].FirstChild;
                XmlDocument xmlResult </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> XmlDocument();
                xmlResult.LoadXml(xmlNode.Value);
                </span><span style="color:#0000FF;">return</span><span style="color:#000000;"> xmlResult;
            }

        }
    }</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2008/04/14/cliente-soap-para-servicios-php-o-java-axis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET Servicios Web y CacheDuration (de paso como activar POST y GET en nuestros servicios web)</title>
		<link>http://www.thedotnetway.net/2007/11/08/aspnet-servicios-web-y-cacheduration-de-paso-como-activar-post/</link>
		<comments>http://www.thedotnetway.net/2007/11/08/aspnet-servicios-web-y-cacheduration-de-paso-como-activar-post/#comments</comments>
		<pubDate>Thu, 08 Nov 2007 08:32:00 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[WebServices]]></category>

		<guid isPermaLink="false">http://thedotnetway.wordpress.com/2007/11/08/aspnet-servicios-web-y-cacheduration-de-paso-como-activar-post/</guid>
		<description><![CDATA[CacheDuration es un atributo de WebMethod con el que podemos implementar de manera muy sencilla un sistema de chache basado en el tiempo, cuando le indicamos la duración del Cache (en segundos) el servidor guarda los parámetros del request y la respuesta, así mientras no caduque el cache para parámetros iguales el código de nuestro [...]]]></description>
			<content:encoded><![CDATA[<p>CacheDuration es un atributo de WebMethod con el que podemos implementar de manera muy sencilla un sistema de chache basado en el tiempo, cuando le indicamos la duración del Cache (en segundos) el servidor guarda los parámetros del request y la respuesta, así mientras no caduque el cache para parámetros iguales el código de nuestro método no se ejecutara y devolverá el resultado desde el cache.</p>
<p>Podéis probar con este código, la primera vez tardara 5 segundos, pero durante el siguiente minuto, para el mismo Texto, será instantáneo:</p>
</p>
<div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:9a793836-d3a6-4e1d-a82d-5311676a3849" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#FFFFFF;white-space:pre-wrap;overflow:auto;font-family:Microsoft Sans Serif;font-size:11px;"><span style="color:#000000;">WebMethod(CacheDuration</span><span style="color:#000000;">=</span><span style="color:#800080;">60</span><span style="color:#000000;">)]
 </span><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">int</span><span style="color:#000000;"> CountChars(</span><span style="color:#0000FF;">string</span><span style="color:#000000;"> Text)
 {
     System.Threading.Thread.Sleep(</span><span style="color:#800080;">5000</span><span style="color:#000000;">);
     </span><span style="color:#0000FF;">return</span><span style="color:#000000;"> String.IsNullOrEmpty(Text) </span><span style="color:#000000;">?</span><span style="color:#000000;"> </span><span style="color:#800080;">0</span><span style="color:#000000;"> : Text.Length;
 }</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
</p>
<p>Ojo que las peticiones vía POST no se guardan en el cache y la pagina de pruebas de los servicios web funciona con POST, así que debes probarlo o bien por SOAP o bien por GET.</p>
<p>Por defecto los servicios web llevan el GET y el POST desactivado, para activarlos solo tenéis que añadir esto dentro de &lt;system.web&gt; en el Web.config:<br />
  </p>
</p>
<p><font color="#000000"></font></p>
<div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:aa7ea533-7fb5-409a-8e19-e17089f5db76" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#FFFFFF;white-space:pre-wrap;overflow:auto;font-family:Microsoft Sans Serif;font-size:11px;"><span style="color:#0000FF;">&lt;</span><span style="color:#800000;">webServices</span><span style="color:#0000FF;">&gt;</span><span style="color:#000000;">
   </span><span style="color:#0000FF;">&lt;</span><span style="color:#800000;">protocols</span><span style="color:#0000FF;">&gt;</span><span style="color:#000000;">
      </span><span style="color:#0000FF;">&lt;</span><span style="color:#800000;">add </span><span style="color:#FF0000;">name</span><span style="color:#0000FF;">="HttpGet"</span><span style="color:#0000FF;">/&gt;</span><span style="color:#000000;">
      </span><span style="color:#0000FF;">&lt;</span><span style="color:#800000;">add </span><span style="color:#FF0000;">name</span><span style="color:#0000FF;">="HttpPost"</span><span style="color:#0000FF;">/&gt;</span><span style="color:#000000;">
   </span><span style="color:#0000FF;">&lt;/</span><span style="color:#800000;">protocols</span><span style="color:#0000FF;">&gt;</span><span style="color:#000000;">
</span><span style="color:#0000FF;">&lt;/</span><span style="color:#800000;">webServices</span><span style="color:#0000FF;">&gt;</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2007/11/08/aspnet-servicios-web-y-cacheduration-de-paso-como-activar-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
