
11 November 2007, 18:17 von
klaus_b2121 mal gelesen.Im vorhergehenden Post habe ich gezeigt, wie ich die Klasse SoapAuthHeader in einem XML Webdienst verwende. In diesem Eintrag wende ich mich der Clientseite zu. Im VWD ist es nun einfach einen Webdienst-Proxy zu erstellen. Da eine Instanz der Klasse SoapAuthHeader im Webdienst vorhanden ist wird bei der Proxyerzeugung die Eigenschaft SoapAuthHeaderValue zur Verfügung gestellt, der eine Instanz der Klasse SoapAuthHeader übergeben werden kann.
// Hält die SoapAuthHeader Klasse
private SoapAuthHeader soapAuthHeaderValueField;
public SoapAuthHeader SoapAuthHeaderValue
{
get
{
return this.soapAuthHeaderValueField;
}
set
{
this.soapAuthHeaderValueField = value;
}
}Genau wie im Webdienst, wird auch auf die Methoden der erzeugten Proxyklasse das SoapHeader-Attribut angewandt.
[SoapHeaderAttribute("SoapAuthHeaderValue", Direction = SoapHeaderDirection.InOut)]
[SoapDocumentMethodAttribute("http://DataCenter.NeBuSa-NET.local/webServices/downPath",
RequestNamespace = "http://DataCenter.NeBuSa-NET.local/webServices/",
ResponseNamespace = "http://DataCenter.NeBuSa-NET.local/webServices/",
Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
[return: XmlElementAttribute("DownloadPath")]
public string downPath(int RowNumber)
{
object[] results = this.Invoke("downPath", new object[]{ RowNumber });
return ((string)(results[0]));
}Alles was jetzt noch zu tun bleibt ist das erzeugen einer Instanz der SoapAuthHeader-Klasse und das zuweisen der benötigten Werte. Das folgende Beispiel ist der Auszug aus einer ASP.NET Seite.
public partial class Download : Page
{
// private Objekte initialisieren
private DataSet ds;
private GetDcProxy dcProxy = new GetDcProxy();
private string downPath = string.Empty;
/// <summary>
/// liefert die benötigten Daten mittels asynchroner Aufrufe
/// verschiedener WebMethoden
/// </summary>
/// <param name="ID">die ID der benötigten Datenbank-Reihe</param>
protected void getData(int ID)
{
// zueisen der Werte an eine SoapAuthHeader-Instanz
SoapAuthHeader authHeader = new SoapAuthHeader();
authHeader.Created = DateTime.Now;
authHeader.Expires = 6;
authHeader.IsEditMode = false;
authHeader.HashValue = Fingerprint.CreateHash(new object[] {
authHeader.Created, authHeader.Expires, authHeader.IsEditMode });
// übergeben der SoapAuthHeader-Instanz an den WS-Proxy
dcProxy.SoapAuthHeaderValue = authHeader;
// ServerPfad zu den Downloads
srvPath = ConfigurationManager.AppSettings["downSrvPath"].ToString();
// Werte vom WebService asynchron holen
IAsyncResult aDownPath = dcProxy.BegindownPath(ID, null, null);
...
// asynchrone Verarbeitung abwarten
aDownPath.AsyncWaitHandle.WaitOne();
...
// Daten an Variablen übergeben
downPath = dcProxy.EnddownPath(aDownPath);
// ...
}
}Zur Erzeugung des Hash-Wert aus den einzelnen Objekten verwende ich die statische Methode CreateHash aus der Klasse Fingerprint. Dies ist eine meiner eigenen Klassen und nicht im .NET Framework vorhanden. Die Methode erwartet ein Array von Objekten und benutzt eine Überladung der Concat Methode aus der String-Klasse um die so erzeugte Zeichenfolge in ein Byte-Array zu konvertieren und daraus einen SHA256 Hash-Wert zu erzeugen. Doch das sollte ein anderes Thema sein.
Technorati-Tags:
Webservice |
ASP.NETWenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitte "kicken" sie ihn.
