C# Web Services: Fail-safe web service usage
Notes:

Question: see book

Answer:

The web page source at the server can look like this:

<% @Page Language="C#" Inherits="XRatePage" src="XRatePage.cs" Culture="en-US" Trace="false" %>

<html>
<head> <title>Exchange Rate</title> </head>
<body>

<p> <% GetXRate(); %> </p>

</body>
</html>

 

and the code behind in C# like this:

 

using System;
using System.IO;
using System.Net;
using System.Web.UI;

public class XRatePage : Page {
protected readonly string appdir;

protected XRatePage () { appdir = MapPathSecure(TemplateSourceDirectory); }

public void GetXRate () {
string rateFormat = "On {1:D} at {1:t} one US Dollar bought class=\"2\">{0:f4} Euros.";

CurrencyExchangeService xrateService = new CurrencyExchangeService();

double rate = -1.0;
try { rate = xrateService0.getRate("usa", "euro"); }
catch (WebException we) { /* could not retrieve data from WebService0 */ }

DateTime date = DateTime.Now;

if (rate >= 0.0) WriteXRate(rate, date); // write new rate to file
else ReadXRate(out rate, out date); // read last rate from file

if (rate >= 0.0) Response.Write(String.Format(rateFormat, rate, date));
else Response.Write("Sorry, exchange rate information unavailable.");
}

void WriteXRate (double rate, DateTime date) {
BinaryWriter writer = new BinaryWriter(File.OpenWrite(appdir + "\\xrate.data"));

writer.Write(date.ToString());
writer.Write(rate);
writer.Close();
}

void ReadXRate (out double rate, out DateTime date) {
BinaryReader reader = new BinaryReader(File.OpenRead(appdir + "\\xrate.data"));

date = DateTime.Parse(reader.ReadString());
rate = reader.ReadDouble();
reader.Close();
}
}

 

With the following command line:


wsdl /out:XRateService.cs http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl

we generated the following source code for the service proxy at the server:

//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version: 1.1.4322.573
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
//------------------------------------------------------------------------------

//
// This source code was auto-generated by wsdl, Version=1.1.4322.573.
//
using System.Diagnostics;
using System.Xml.Serialization;
using System;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Web.Services;


///
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="CurrencyExchangeBinding", Namespace="http://www.xmethods.net/sd/CurrencyExchangeService.wsdl")]
public class CurrencyExchangeService : System.Web.Services.Protocols.SoapHttpClientProtocol {

///
public CurrencyExchangeService() {
this.Url = "http://services.xmethods.net:80/soap";
}

///
[System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="urn:xmethods-CurrencyExchange", ResponseNamespace="urn:xmethods-CurrencyExchange")]
[return: System.Xml.Serialization.SoapElementAttribute("Result")]
public System.Single getRate(string country1, string country2) {
object[] results = this.Invoke("getRate", new object[] {
country1,
country2});
return ((System.Single)(results[0]));
}

///
public System.IAsyncResult BegingetRate(string country1, string country2, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("getRate", new object[] {
country1,
country2}, callback, asyncState);
}

///
public System.Single EndgetRate(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((System.Single)(results[0]));
}
}

and then compiled it with the command line:

csc /out:bin\XRateService.dll /target:library XRateService.cs

No votes yet
Related Links:C# AssembliesC#Web Services in C#: Several scenarios in which web services could be useful.C# Web Services: Stock QuotesC# Web Services: Using the Google Web Service
© Copyright 2008. All Rights Reserved.