Nachdem ich die Klasse SoapAuthHeader, wie im vorherigen Post gezeigt, erstellt hatte soll sie auch in verschiedenen Webdiensten zum Einsatz kommen. Die Implementierung in eine Webdienst-Methode ist denkbar einfach. Erst wird in der Webdienst-Klasse eine neue Instanz der SoapAuthHeader-Klasse erzeugt und anschließend  im SoapHeader-Attribut auf diese Instanz verwiesen.

public class GetDcDataSet : WebService
{
  public SoapAuthHeader authHeader;

  [SoapHeader("authHeader", Direction = SoapHeaderDirection.InOut)]
  [WebMethod(BufferResponse = true, CacheDuration = 0,
    Description = "liefert den DownloadPfad der Anwendung aus der Datenbank")]
  [return: XmlElement(ElementName = "DownloadPath", Type = typeof(string))]
  public string downPath([XmlElement(ElementName = "RowNumber")]int id)
  {
    if (authHeader == null)
    {
      throw new SoapException("Unerlaubter Zugriff auf diesen WebService.",
         SoapException.ClientFaultCode, Context.Request.Url.AbsoluteUri);
    }

    if (!CheckAuthHeader.IsHeaderValid(authHeader))
    {
      throw new SoapException("Der Authentifizierungsheader ist korrupt. Daten wurden verändert.",
	SoapException.ClientFaultCode, Context.Request.Url.AbsoluteUri);
    }

    string _downPath = string.Empty;

    try
    {
      // hier die Datenbank-Logik
    }
    catch (Exception ex)
    {
      throw new SoapException(ex.Message, SoapException.ServerFaultCode, ex);
    }
      return _downPath;
  }
}

Als erstes wird überprüft ab Daten an die Instanz authHeader übergeben wurden. Ist dies nicht der Fall, wird eine Ausnahme ausgelöst. Als nächstes wird überprüft, ob die übertragenen Daten gültig sind. Dies wird in der Methode IsHeaderValid der Klasse CkeckAuthHeader, auf die ich später noch eingehen werde, erledigt. Wenn die im Header übertragenen Daten validiert wurden, wird der Datenbankzugriff vorgenommen und die benötigten Daten werden zum Client übermittelt. Sollte der Header inkonsistente Daten enthalten, wird eine Ausnahme ausgelöst.

Soweit zur Verwendung auf der Server-Seite. In einem der nächsten Post's werde ich auf die Proxy-Klasse und die Clientseite eingehen.

Technorati-Tags:  | 
Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitte "kicken" sie ihn.
kick it on dotnet-kicks.de