« Visual C++ 2005 Express Edition | トップページ | Windows Vista Product Guide »

2006年5月20日 (土)

AtlasでのWebサービスの呼び出し

今日はASP.NET "Atlas" で Gadget を作成するの続き的な内容です。
その時は単純にボタンが押されたときに値を表示していましたが、もう少し役立つ例としてWebサービスの呼び出しコードを書いておきます。

まず、呼び出すWebサービスはこんな感じです。

    [WebMethod]
    public string HelloWorld(string strName) {
        return "Hello World " + strName;
    }
# asmxファイルを追加したときに書かれてるメソッドに引数をつけただけです(^_^;)

このWebサービスを呼び出す場合にはJavaScriptでこのような書き方をします。

    WebService.HelloWorld($('Text1').value, OnComplete);

簡単です。
1つめの引数はWebサービスに渡す値ですね。
2つめの引数はなんでしょう?
Webサービスの呼び出しはXMLHttpオブジェクトを使って非同期で呼び出します。
このレスポンスが戻ってきたときの処理を記述するためのメソッドになります。
ですので、レスポンスを受け取ったときにその結果を表示するなどの処理を行う場合は下記のようなコードも記述する必要があります。

function OnComplete(result)
{
    $('Div1').innerText = result;
}

こちらも簡単ですね。
といった形でAtlasのコントロールを使わない場合でもAtlasは非常に便利です。

ちなみに同じ事をAtlasなしで書くとこんな感じで非常にめんどくさいです。
ご参考までに下記に載せておきますね。

// JScript ファイル

function Button1_OnClick() {
  var xmlhttp = createXmlHttp();
  if (xmlhttp == null) {
    window.alert("XMLHttp 未対応");
  }

  xmlhttp.onreadystatechange = handleHttpEvent;

  function handleHttpEvent() {
    if (xmlhttp.readyState == 4) {
      if (xmlhttp.status == 200) {
        var objDOM = xmlhttp.responseXML;
        var strData;

        if (objDOM.documentElement) {
          strData = objDOM.getElementsByTagName('HelloWorldResult').item(0).text;
          if (strData == null) strData = '1';
        } else {
            strData = '2';
        }

        document.getElementById("Div1").innerText = strData;
      }
      else {
        window.alert("通信エラー");
      }
    }
  }

  var xmlDoc = createXmlDom();
  xmlDoc.async = false;
  var strXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><HelloWorld xmlns=\"http://tempuri.org/\"><strName>" + document.getElementById("Text1").value + "</strName></HelloWorld></soap:Body></soap:Envelope>";
  xmlDoc.loadXML(strXML);

  xmlhttp.open("POST", "./WebService.asmx");
  xmlhttp.setRequestHeader("SOAPAction", "\"http://tempuri.org/HelloWorld\"");
  xmlhttp.send(xmlDoc);
}

function createXmlDom() {
  if (document.implementation.createDocument) {
    return document.implementation.createDocument("", "", null);
  }
  else if (window.ActiveXObject) {
    return new ActiveXObject("Microsoft.XMLDOM");
  }
  else {
    return null;
  }
}

function createXmlHttp() {
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  }
  else if (window.ActiveXObject) {
    try {
      return new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e) {
      return new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  else {
    return null;
  }
}

function Button1_OnClickAtlas()
{
    WebService.HelloWorld($('Text1').value, OnComplete);
    return false;
}

function OnComplete(result)
{
    $('Div1').innerText = result;
}

|

« Visual C++ 2005 Express Edition | トップページ | Windows Vista Product Guide »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: AtlasでのWebサービスの呼び出し:

» XMLHttpRequest [XMLHttpRequest]
【Ajax】prototype.jsのXMLHttpRequest Opera 9s XMLHttpRequest #2 d.aql - XMLHttpRequestとリクエストヘッダ 【仕様】W3C 草案UPDATE The XMLHttpRequest Object Opera 9s XMLHttpRequest ふぁっきん not well-formed, XMLHttpRequest とかで MTでAjax!!〜XML... [続きを読む]

受信: 2006年8月18日 (金) 16時00分

« Visual C++ 2005 Express Edition | トップページ | Windows Vista Product Guide »