Un cop està preparada tota la configuració necessària per fer la invocació només queda aquesta pròpiament dita. En l'aplicació també hi han els botons de "Load" i "Save" que el que fan és escriure els valors dels controls en un fitxer XML i recuperar els valors, no cal que els expliqui...
Abans de pròpiament fer la invocació a Webservice, cal configurar l'accés. S'ha de tenir en compte que la URL pot ser HTTPS, pot haver-hi un proxy previ per accedir al servidor web o potser el servidor web fa servir autenticació bàsica HTTP.
Aquests 3 punts requereixen una configuració prèvia a la invocació.
HTTPS: Per acceptar connexions HTTPS el EndPoint local ha de reconèixer el certificat com a vàlid. Per això cal afegir un validador de certificats (només cal afegir-lo un cop), que en aquesta eina per fer proves és un validador que els accepta tots. Per això en l'event Form_Load es posa un call back a la rutina que fa l'acceptació.
Si es vol fer l'autenticació bàsica HTTP, cal fer:
//Afegir una capçalera HTTP a la crida, l'string es fa a partir de la//clase de més a sota, req és una variable de tipus HttpRequest.if (HTTPBasic != null)
{
string auth = HTTPBasic.CreateAuthorization();
req.Headers.Add("Authorization", "Basic " + auth);
}
publicclass clsHTTPBasicAuthorization
{
publicstring Domini { get; set; }
publicstring Usr { get; set; }
publicstring Pwd { get; set; }
/// <summary>/// Retorna un string per posar en header authorization d'una petició HTTP/// </summary>/// <param name="domini">Sense HTTP ni el subdomini , només google.es. Es opcional, es pot passar ""</param>/// <param name="userName">Usuari</param>/// <param name="password">Pwd</param>/// <returns>L'string en Base64 que s'ha de posar en totes les peticions</returns>publicstring CreateAuthorization()
{
string auth = "";
if (!string.IsNullOrWhiteSpace(Domini)) auth = Domini + @"\";
auth += Usr + ":" + Pwd;
auth = Convert.ToBase64String(Encoding.Default.GetBytes(auth));
return auth;
}
}
Finalment si es vol fer servir un proxy cal afegir la configuració del mateix a la crida:
publicclass clsProxy
{
publicstring ProxyURL { get; set; }
publicstring ProxyUsr { get; set; }
publicstring ProxyPwd { get; set; }
publicstring ProxyPort { get; set; }
public WebProxy GetProxy()
{
if (string.IsNullOrWhiteSpace(ProxyURL)) returnnull;
else
{
WebProxy Pxy = new WebProxy();
UriBuilder UriBld = new UriBuilder(ProxyURL);
if(!string.IsNullOrWhiteSpace(ProxyPort)) UriBld.Port = int.Parse(ProxyPort);
Pxy.Address = UriBld.Uri;
if (!string.IsNullOrWhiteSpace(ProxyUsr))
{
Pxy.Credentials = new NetworkCredential(ProxyUsr, ProxyPwd);
}
else Pxy.UseDefaultCredentials = true;
return Pxy;
}
}
}
//Després a la HttpRequest cal fer:
req.Proxy = pProxy.GetProxy();
#11/02/2015 17:37 Programació C# Autor: Alex Canalda
A vegades haig d'invocar Webservices de formes rares, aleshores ensopegues amb les llibreries i eines que et proporciona l'arquitectura que fas servir. Per exemple potser l'eina WSDL del .NET no et genera les classes correctament, o bé el Webservice fa servir WS-Addressing, o ...
I es que de fet, si un s'ho para a pensar el SOAP no és res més que XML, i text al fi i al cap. I el que es diu "invocar a un Webservice" no és res més que HTTP POST contra una URL d'un servidor web. Com a molt, i principal diferència amb una petició HTTP normal s'ha d'afegir una capçalera HTTP, el SOAPAction en SOAP 1.1, en 1.2 no cal posar-la.
Aleshores quan un vol invocar a un Webservice el que ha de fer és ajuntar un text, un XML, i fer un POST. Donat que això és senzill he fet un programa per fer tests ràpids de Webservices, es el SOAP Poster.
El SOAP Poster és una aplicació Winforms que amb un interface simple permet enviar un text a una URL. Amb alguns detalls, com per exemple si s'ha de fer servir un proxy, o HTTP-Basic Authentication o si cal fer proves de concurrència hi ha un número que indica la quantitat d'invocacions. El codi està directament posat als events dels controls. El veure'm en detall en futurs posts.
#11/02/2015 11:26 Programació C# Autor: Alex Canalda
Cleopatra va estar més aprop del naixement del iPhone que del naixement de les piràmides. La piràmide de Keops es va construir sobre el 2570 aC, i la Cleopatra va nèixer al 70 aC. Es a dir que la Cleopatra està a 2070 anys de distancia del iPhone i la piràmide queda més lluny. Curiós!
Ja he acabat el tercer llibre... mmm... segueix on ho deixa l'anterior i acaba lligant tots els fils (cosa que és d'agrair). Però he trobat tota l'obra una mica infantil, amb acció però no massa, amb amor però molt suau, amb tecnologia però no gaire, sense gaires temes filosòfics (algun que altra, però pocs i no gaire profunds)... El final un xic abrupte però ja l'esperava.
M'ha agradat? Mmmmm... Es pot dir que sí, però esperava més nivell del Jack Vance. El que he trobat és que es pot explicar el mateix sense allargar-ho tant. Recomanable? Pse, ni sí ni no, això ja depèn de l'humor de cadascú. Si es vol una novel·la policíaca suau, ambientada correctament en el futur, i sense gaires complicacions aquest és llibre.
El llibre segueix on ho deixa l'anterior. [Spoilers!] Glawen Clattuc ha esbrinat que el seu pare, Scharde, està presoner pel seu antic enemic Smonny Clattuc. Ell va a rescatar-lo al continent selvàtic Ecce, amb una fauna peculiar. Allí rescata al seu pare, al Eustace Chilke i a una altra presoner que els dóna força informació. Després el negociat B rescata a la resta de presoners.
De mentres la Wayness Tamm (la novia del Glawen) està ocupada seguint el rastre de la Carta de Cadwal, que és el títol de propietat del planeta. Això fa que visiti altres planetes i llocs a quin més curiós. Hi ha d'altres que també persegueixen el mateix, i l'espien.
El llibre és força suau (vull dir que no hi ha gaire sang ni fetge), es deixa llegir sense estressar gaire. Va saltant entre els dos fils argumentals i a vegades deixa el tema en un "cliff-hanger" que es resol quan reprèn el fil. Sci-fy? MMMmmmm, és gairebé més aviat policíac amb una ambientació molt bona. M'agradat!
En un altra post ja tractava el tema de la fiabilitat dels discs durs mecànics, també en aquest altra post. Backblaze segueix publicant estadístiques de quins discs aguanten més. Aquest any hi ha hagut un increment força accentuat de fallades en els discs durs de 3TB de Seagate. [Ironic mode on] Els que tenim algun disc d'aquests estem molt contents...