CPUの温度を取得する際、WebClient を使用した、非同期呼び出し。
なお、Silverlight 3 Beta では、linq がサポートされていないので動かない。
///////////
WebClient client = new WebClient();
string request = "<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><CPUTemperatureStringResponse xmlns=\"http://tempuri.org/\"> <CPUTemperatureStringResult>float</CPUTemperatureStringResult> </CPUTemperatureStringResponse></soap:Body></soap:Envelope>";
client.Headers.Add(HttpRequestHeader.ContentType, "text/xml");
client.Headers.Add("SOAPAction", "http://tempuri.org/CPUTemperature");
client.UploadStringCompleted += delegate(Object sender2, UploadStringCompletedEventArgs ev)
{
XNamespace soap="http://schemas.xmlsoap.org/soap/envelope/";
XNamespace xsi="http://www.w3.org/2001/XMLSchema-instance";
XNamespace xsd="http://www.w3.org/2001/XMLSchema";
XNamespace xst = "http://tempuri.org/";
XDocument xmlHeadlines = XDocument.Parse(ev.Result);
var headlines = from story in xmlHeadlines.Descendants(xst + "CPUTemperatureResult") select story;
string temp = headlines.First().Value;
TextBox1.Text = temp;
};
client.UploadStringAsync(new Uri("http://localhost/SystemTemperature/Temperature.asmx"), request);
あれ?確か LINQ to XML は Beta1 でも使えるはずですが。。。それとは別に、WebClientのHeader要素への書き込みは出来なくなっているはず