eBiss 3

Hilfe & Dokumentation

Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Themen

howtos:plugins:webservices:codesample

Entwicklung des Webservices

Nachfolgend finden Sie ein Code-Beispiel als auch Informationen über die benötigten Referenzen.

Schnittstellen

Die für die Erstellung relevanten Schnittstellen befinden sich in der eBiss.Api.dll zu der eine Referenzen in dem .NET Projekt hinzugefügt werden muss. Hierbei ist immer darauf zu achten, die aktuellste Version der Bibliothek zu verwenden.
Des Weiteren benötigen Sie System.ServiceModel und System.ServiceModel.Web als Referenz in Ihrem Projekt.

eBiss.Api.WebServiceBase

Ihr Webservice muss lediglich von der Klasse eBiss.Api.WebServiceBase erben. Diese Klasse stellt die benötigten Methoden bereit, um Ihre empfangenen Daten anschließend in eBiss verarbeiten zu können.
Wichtig ist, dass Sie innerhalb Ihrer Methode das Document zuweisen. Im Beispiel findet sich folgende Zeile:

this.Document = new ExampleRequest() { Info = info };

Erläuterung:
eBiss erwartet für die Verarbeitung von Daten stets Nachrichten bzw. deren Dokumente. Da Sie mit Ihrem webservices wahrscheinlich eingehende Daten mit eBiss verarbeiten möchten, kann nur dann eBiss die empfangenen Daten zur späteren weiterverarbeitung richtig kapseln, wenn Sie das Dokument entsprechend zuweisen.

WCF Programming Model

Unser Beispiel entpricht dem Programmiermodell von Microsofts WCF. Hierzu finden Sie weitere Informationen über die Verwendung der Attribute:
https://docs.microsoft.com/de-de/dotnet/framework/wcf/feature-details/wcf-web-http-programming-model-overview

Servicedefinition

Nachfolgend finden Sie eine Vorlage für eine einfache Service-Implementierung deren Umsetzung sie auch im ausgelieferten Code unter
eBiss3.. \StandardTemplates\PluginSample\eBiss.PluginSample finden.

using eBiss.Api;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
 
namespace eBiss.PluginSamples.WebService
{
    [ServiceContract]
    public class ExampleService : WebServiceBase
    {
        /// <summary>
        /// Sample Call:
        ///   curl -X POST -i 'http://127.0.0.1:8093/TestApi/ExampleMethod' --data-binary @PathToFileName
        ///   
        /// If you have complex data, e.g. WS HTTP binding
        /// </summary>
        /// <returns></returns>
        [OperationContract, WebInvoke(Method = "POST")] // 
        public ExampleResponse ExampleMethod(ExampleRequest req)
        {
            this.Document = req;
 
            WaitForMessageCreated();
 
            return new ExampleResponse(HttpStatusCode.OK);
        }
 
               /// <summary>
        /// Sample call:
        ///     curl -X POST -i 'http://127.0.0.1:8080/GetVariables?info=value1'
        /// </summary>
        /// <param name="filter">Use * for all or variable name</param>
        /// <returns></returns>
        [OperationContract, WebInvoke(Method = "POST", UriTemplate = "/GetVariables?filter={filter}")]
        public Stream GetVariables(string filter)
        {
            WaitForInitialization();
 
            Log.Info($"Call GetVariables(\"{(filter ?? "<null>")}\")");
 
            ResponseVariableInfo rv = new ResponseVariableInfo(HttpStatusCode.OK);
 
            foreach (string key in Variables.Keys)
            {
                if (filter == null || filter == "*" || key.StartsWith(filter, System.StringComparison.CurrentCultureIgnoreCase))
                {
                    Log.Info($" add variable '{key}'");
                    rv.Variables.Add(new VariableInfoItem(key, Variables[key].ToString()));
                }
                else
                {
                    Log.Info($" variable '{key}' is not selected by the filter");
                }
            }
 
 
            return EntitiesBase.JsonExporter().ExportToStream(rv);
        }
    }
 
    [DataContract]
    public class ExampleRequest : IMapObjectRoot
    {
        public string Info;
    }
 
    [DataContract]
    public class ExampleResponse
    {
        public HttpStatusCode Status { get; }
 
        public ExampleResponse(HttpStatusCode status)
        {
            Status = status;
        }
    }
}
howtos/plugins/webservices/codesample.txt · Zuletzt geändert: 2024/02/20 08:15 von 127.0.0.1