{"id":730,"date":"2013-05-13T23:55:41","date_gmt":"2013-05-14T05:55:41","guid":{"rendered":"http:\/\/www.lastdragon.net\/?p=730"},"modified":"2013-05-13T23:55:41","modified_gmt":"2013-05-14T05:55:41","slug":"webservice-en-php-consumidos-en-c","status":"publish","type":"post","link":"https:\/\/www.lastdragon.net\/?p=730","title":{"rendered":"WebService en PHP consumidos en C#"},"content":{"rendered":"<p>Los Webservice son servicios de funciones o clases remotas consumidas por un programa local de forma que  se puede utilizar para transferir informaci\u00f3n entre programas mediante protocolos ya establecidos.<\/p>\n<p>Los WebService pueden entregarnos aplicaciones ligeras, los recursos de un tel\u00e9fono Iphone o Android son limitados y mientras m\u00e1s procesan m\u00e1s r\u00e1pido agotan su bater\u00eda. Si una aplicaci\u00f3n consume un webservice, toda la l\u00f3gica de negocios, todo el procesamiento detr\u00e1s de ese webservice es ejecutado por el servidor que lo provee. <\/p>\n<p>B\u00e1sicamente un WEBSERVICE provee clases remotas que pueden ser instanciadas en una aplicaci\u00f3n o programa local sin importar el lenguaje remoto. <\/p>\n<p>Cualquier lenguaje que soporte WEBSERVICE para consumir o para exportarlos puede recibir o enviar informaci\u00f3n sin importar en que lenguaje se exporta o se consume el webservice.<\/p>\n<p>Un ejemplo seria un webservice corriendo en cluster de cientos de procesadores y computadoras, haciendo c\u00e1lculos en segundos que a una PC tradicional le tomar\u00eda horas y ni decir de un simple iphone o android que agotar\u00edan sus bater\u00edas antes de concluir el c\u00e1lculo<\/p>\n<p>Con un webservice  una aplicaci\u00f3n de de Iphone o Android podr\u00eda iniciar ese c\u00e1lculo en el cluster y esperar el resultado ya procesado. A la vista del usuario la aplicaci\u00f3n ha resuelto su problema y no le importa si los c\u00e1lculos fueron hechos en su tel\u00e9fono o si fueron enviados a un cluster remoto<\/p>\n<p>Como el lenguaje m\u00e1s com\u00fan de la red es PHP, aqu\u00ed mostrare el c\u00f3digo m\u00e1s b\u00e1sico para tener un WebService que puede ser consumido remotamente por una aplicaci\u00f3n en C#<\/p>\n<p>En PHP existe una librer\u00eda llamada NuSoap, se descarga y descomprime en el directorio donde est\u00e1 la aplicaci\u00f3n Webservice que deseas exportar<\/p>\n<p>En este ejemplo hare el c\u00f3digo sencillo del hola mundo o saludo.<\/p>\n<p>C\u00f3digo en PHP<\/p>\n<blockquote><p>&lt;?php<\/p>\n<p>require_once &#8220;lib\/nusoap.php&#8221;;<\/p>\n<p>\/\/ La funcion que se va a exportar<br \/>\nfunction saludo($nombre)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return &#8220;Hola &#8220;.$nombre;<br \/>\n}<\/p>\n<p>\/\/ Se crea el objeto para el webservice<br \/>\n$servicio = new soap_server();<br \/>\n\/\/ Se inicializa el webservice<br \/>\n$servicio-&gt;configureWSDL(&#8220;webserv&#8221;, &#8220;urn:webserv&#8221;);<br \/>\n\/\/ Se registra la funcion que se va a exportar, con el tipo de datos de<br \/>\nentrada y el tipo de dato de salida<br \/>\n$servicio-&gt;register(&#8220;saludo&#8221;,array(&#8220;nombre&#8221; =&gt;<br \/>\n&#8220;xsd:string&#8221;),array(&#8220;return&#8221; =&gt; &#8220;xsd:string&#8221;));<br \/>\n\/\/ Como el servicio es proveedo por un servidor WEB la informacion del<br \/>\nwebservice sera recibida en METHOD POST<br \/>\n$servicio-&gt;service($HTTP_RAW_POST_DATA);<\/p>\n<\/blockquote>\n<p>Con este c\u00f3digo ya tenemos un webservice escrito en PHP, para consumirlo en C# hay que escribir un proxy se enlace al webservice y convertirlo a una clase local, esto son muchas l\u00edneas de c\u00f3digo. Afortunadamente la mayor\u00eda de los IDE de .NET como Visual Studio o SharpDevelop crean este proxy e importan el WebService con solo agregar una REFERENCIA WEB en la que se le pasa el URL del archivo PHP o cualquier otro lenguaje donde radica el WEB Service.<\/p>\n<p>Un par\u00e9ntesis para quienes usan .NET con Mono en GNU\/Linux<br \/>\nSi no tienes un IDE y estas programando en consola por ejemplo en C# pero con Mono, se usa el comando wsdl para generar el proxy<\/p>\n<blockquote><p>wsdl https:\/\/www.lastdragon.net\/webserv\/serv.php?wsdl<\/p>\n<p>Writing file &#8216;webserv.cs&#8217;<\/p>\n<p>El archivo resultante con el proxy es webserv.cs que debe ser compilado a una DLL<br \/>\nmcs \/target:library webserv.cs -r:System.Web.Services<br \/>\nEl resultado ser\u00eda webserv.dll, que ya puede ser agregada a la compilaci\u00f3n del programa mono<br \/>\nmcs \/r:webserv.dll consumo.cs<\/p><\/blockquote>\n<p>De regreso a SharpDevelop o Visual Studio.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lastdragon.net\/misarchivos\/webserv\/webserv.jpg\" alt=\"WebService PHP C#\" width=\"425\" height=\"350\" \/><br \/>\n<a href=\"https:\/\/www.lastdragon.net\/misarchivos\/webserv\/webserv.jpg\">Ver mas grande<\/a><\/p>\n<p>https:\/\/www.lastdragon.net\/webserv\/serv.php<br \/>\nUna vez importado el webservice se usa como si se tratara de una librer\u00eda mas de C# y de la misma forma se aprovechan sus clases.<\/p>\n<p>C\u00f3digo en C# <\/p>\n<blockquote><p><span style=\"color: rgb(0, 128, 0); font-weight: bold;\">using<\/span>&nbsp;System;<br \/>\n<span style=\"color: rgb(0, 128, 0); font-weight: bold;\">using<\/span>&nbsp;System.Web.Services;<br \/>\n<span style=\"color: rgb(0, 128, 0); font-weight: bold;\">using<\/span>&nbsp;webservclient;<\/p>\n<p>\n&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: rgb(255, 0, 0);\">class<\/span>&nbsp;Program<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;{<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: rgb(0, 0, 255); font-weight: bold;\">public<\/span>&nbsp;<span style=\"color: rgb(165, 42, 42);\">static<\/span>&nbsp;<span style=\"color: rgb(255, 0, 0);\">void<\/span>&nbsp;<span style=\"color: rgb(25, 25, 112); font-weight: bold;\">Main<\/span>(<span style=\"color: rgb(255, 0, 0);\">string<\/span>[]&nbsp;args)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webserv<br \/>\nx =&nbsp;<span style=\"color: rgb(0, 139, 139); font-weight: bold;\">new<\/span>&nbsp;<span style=\"color: rgb(25, 25, 112); font-weight: bold;\">webserv<\/span>();<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.<span style=\"color: rgb(25, 25, 112); font-weight: bold;\">WriteLine<\/span>(x.<span style=\"color: rgb(25, 25, 112); font-weight: bold;\">saludo<\/span>(<span style=\"color: rgb(0, 0, 255);\">&#8220;Last Dragon&#8221;<\/span>));<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.<span style=\"color: rgb(25, 25, 112); font-weight: bold;\">ReadKey<\/span>(<span style=\"color: rgb(0, 139, 139); font-weight: bold;\">true<\/span>);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;}<\/p><\/blockquote>\n<p>El resultado de la ejecusion es:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lastdragon.net\/misarchivos\/webserv\/consumo.jpg\" alt=\"WebService PHP C#\" width=\"425\" height=\"350\" \/><br \/>\n<a href=\"https:\/\/www.lastdragon.net\/misarchivos\/webserv\/consumo.jpg\">Ver mas grande<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los Webservice son servicios de funciones o clases remotas consumidas por un programa local de forma que se puede utilizar para transferir informaci\u00f3n entre programas mediante protocolos ya establecidos. Los WebService pueden entregarnos aplicaciones ligeras, los recursos de un tel\u00e9fono Iphone o Android son limitados y mientras m\u00e1s procesan m\u00e1s r\u00e1pido agotan su bater\u00eda. Si&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-730","post","type-post","status-publish","format-standard","hentry","category-programacion"],"_links":{"self":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/730","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=730"}],"version-history":[{"count":0,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/730\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}