Per la comunicazione, avendo a disposizione tutte le funzionalità di Javascript su IE, ho ben pensato di usare l' oggetto XMLHttpRequest. Non sto qui a spiegare tutti i passaggi, ma vediamo solamente nel dettaglio cosa dobbiamo fare per accedere ad esempio, ad un webservice.

Per prima cosa accediamo al wsdl e vediamo come è descritto il nostro webservice, in questo caso : WebServiceX. Sappiamo che il metodo web si chiama Translate, che ha due parametri in entrata : LanguageMode e Text. Infine nella descrizione ci viene fornito un elenco delle possibili traduzioni. In questo caso per ovviare a futuri bug, ho inserito le 4 lingue certe.

function makeRequest(url, param)
{
    var http_request = false;
    // Check
    if (window.XMLHttpRequest)
    {
        // Mozilla, Safari, ...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType)
        {
            http_request.overrideMimeType('text/xml');
            // See note below about this line
        }
    }
    else if (window.ActiveXObject)
    {
        // IE
        try
        {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e)
            {
                alert(e.message);
            }
        }
    }

    if ( ! http_request)
    {
        alert('Warning :( XMLHttpRequest not supported.');
        return false;
    }
    http_request.onreadystatechange = function()
    {
        alertContents(http_request);

    }
    ;

La chiamata avviene cosi' :

makeRequest("http://www.webservicex.com/TranslateService.asmx/Translate", _param);

Chiaramente _param viene costruito prima, in base ai dati forniti dall' utente. Per la firma di _param basta interpretare il WSDL del servizio che vogliamo usare.

Adesso non ci rersta che interpretare il risultato, che vi ricordo, viene fornito in forma di dati XML. Qui una piccola funzione per interpretare i messaggi di risposta.

//ricevo i dati
var _XMLResult = http_request.responseXML;
Show_Result(parse_xml(_XMLResult), true);
//parse del risultato
... ...
    try
    {
        var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        var objNamedNodeMap;
        var objNode;
        xmlDoc.async = false;
        xmlDoc.resolveExternals = false;
        xmlDoc.load(target_xml);
        if (xmlDoc.parseError.errorCode != 0)
        {
            var myErr = xmlDoc.parseError;
            return "You have error " + myErr.reason;
        }
        else
        {
            return xmlDoc.documentElement.firstChild.data;
        }
    }
    catch(e)
    {
        return e.message;
    }

Abbiamo tutto quel che ci serve per interrogare servizi web e rendere quindi il nostro gadget molto funzionale.
Nel gadget che espongo su CodePlex troverete diversi file .js, per gestire effetti, impostazioni e altre funzionalità.