====== 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
{
///
/// 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
///
///
[OperationContract, WebInvoke(Method = "POST")] //
public ExampleResponse ExampleMethod(ExampleRequest req)
{
this.Document = req;
WaitForMessageCreated();
return new ExampleResponse(HttpStatusCode.OK);
}
///
/// Sample call:
/// curl -X POST -i 'http://127.0.0.1:8080/GetVariables?info=value1'
///
/// Use * for all or variable name
///
[OperationContract, WebInvoke(Method = "POST", UriTemplate = "/GetVariables?filter={filter}")]
public Stream GetVariables(string filter)
{
WaitForInitialization();
Log.Info($"Call GetVariables(\"{(filter ?? "")}\")");
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;
}
}
}