Grüßt euch,
Ich suche eine alternative zum Griffin Web Server.
Zum einen ist nicht geklärt welche Lizenz verwendet wird und zum anderen wird dem Anschein keine Weiterentwicklung vorangetrieben. Krankheiten musste ich an der API selbst beheben.
Ich brauche eine Socket Https Server API am besten mit MIT Lizenz.
Meine derzeitige Anwendung stellt einen Services ähnlich wie Rust unter den Port 2241 zu Verfügung. Dieser Services läuft über die besagte API. Die Handhabung ist bei griffen sehr schön einfach. Man hat eine Server klasse die instanziiert wird. Mit ihr steuert man den Server. An diese werden einfach selbst definierte Request Handler angehangen und das wars. Der Request Handler hat eine Funktion die eine liste der Parameter wie auch Streams zu Verfügung stellt, um zu uploaden oder downloaden. Als Return wird der resultierende zahlen code zb. 200 oder 400 übergeben.
Um den ganzen Rest wie auch SSL3 kümmert sich die API.
Habt ihr Empfehlungen?
Bisschen mehr Infos, wovon Du redest, wäre vielleicht voll. Redest Du von https://github.com/jgauffin/Griffin.WebServer ?
Das ist ne Apache-2 Lizenz, steht zumindest in den csproj Infos. Einfach zu finden, in dem man einfach in die Repository-Suche License
eingibt.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Grüße, ja das genau das ist das Repo.
Interessant das man das in der Projekt Datei reinschreiben kann. Aber da auch etwas fehl am platz.
Ganz sicher nicht fehl am Platz, weil genau dieses Attribut in der csproj dazu da ist.
Dass eine License-Datei zusätzlich ins Repo gehört: ja.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
na gut aber eine alter native wär schon schön. Wie gesagt erfährt das Projekt kaum weiter Entwicklung. Auf Beiträge wird nicht eingegangen.
Ohne den Server im Detail zu kennen, was spricht den dagegen z.B. Kestrel als einfachen Http Server zu nehmen und dann die Api selbst einfach mit Bordmitteln oder passenden NuGet Paketen zu bauen?
Sehe jetzt nicht welchen Vorteil/Zweck Grifin hat, den man mit einem anderen Http Server nicht umsetzen kann.
M.m.n. fährst du ohne den Grifin Server, bei dem es auch Issues gibt die in 4 Jahren nicht angefasst wurde, besser als weiter auf dieses tote Pferd zu setzen.
Nachtrag:
Selbst das Framework hinter dem Server scheint keine Updates mehr zu bekommen.
Letzter comitt beim Framework war vor 9 Monaten, auch dort scheinen keine Issues mehr angefasst zu werden und die Website des Framework meldet ein fehlerhaftes Zertifikat, was eine Red Flag für mich wäre.
Nachtrag 2:
Das Projekt scheint tot zu sein.
Die Webseite des Frameworks zeigt auf eine Casino Seite!
Damit würde ich ein komplettes Replacement von Grifin Framework und Server ins Auge zu fassen!
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Das ist ja genau das was ich meine. "Es ist Tod, Jim"
Von Kestrel habe ich noch nichts gehört. Ich verstehe es als eine Server des ASP Core Frameworks, liege richtig?
Meine "Benutzer" Anwendung ist eine UI mit integriertem Server für Interprozesskommunikation und für aus halb mit einer Web Oberfläche und SOAP(kleine Korrektur meiner seist, Rust war es nicht).
Griffen ist sehr kompakt und erfordert keine höheren rechte, damals waren das die Haupt Kriterien.
Mir fehlt es gerade an Vorstellungskraft wie ich mir das vorstellen habe, wie diese implementiere.
Dieses Projekt ist auch mittlerweile sehr alt und läuft auf .NET Framework 4.6.2. (Musss ich auch noch hochziehen)
Das was ich dann auch noch sehe ich muss das ASP Framework mitliefern für die Installation.
Ich bräuchte bitte mehr Informationen.
Was is denn eigentlich Deine Frage? Soll Dir jemand eine Alternative zu Griffin suchen, oder wie?
Fürchte, dass Dein aktuellen Server quasi niemand kennt - da wirst Dich selbst auf die Suche nach Alternativen machen müssen. Das Ding ist mit 90k totalen Downloads in 6 Jahren de facto unbekannt.
Wie können (und werden) Dir, selbst wenn wir wöllten, die Evaluierung ja auch nicht abnehmen können. Das ist Deine Verantwortung als Entwickler.
Ich bräuchte bitte mehr Informationen.
Das is ja was, was Du selbst machen kannst. Die Idee des Forums ist ja nicht, für Dich aus der Doku zu kopieren. Das kannst ja irgendwie selbst durchlesen, wa?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich such ja nach einer API für https. im Grunde sollten die alle gleich sein, oder ?
ASP.net ist wenn ich es richtig sehe keine API sondern ein Services ähnlich wie PHP. Es ist schon ein kompletten Server mit Infrastruktur.
Griffen hingegen ist nur das https Protokoll. Ich übernehme die Infrastruktur. Sowas suche ich.
Du schreibst du weist nicht was das für ein Server ist. Was soll ich dir genauer beschreiben?
Das was jetzt folgt ist eigentlich alles, in dem fall sind paar Module nicht inbegriffen aber das web call Modul ist da voll abgebildet.
Und so wie ich es verstehe ist es ein einfacher Socket Server.
partial class InputServer
{
private volatile static DirectoryInfo serverDirInfo = new DirectoryInfo(ShareAndReceive.Properties.Settings.Default.ServerDir);
private HttpServer serverLinsener;
public InputServer()
{
DataProvisionServerModule mod = new DataProvisionServerModule(serverDirInfo);
mod.ItemEntrance += mod_ItemEntrance;
ModuleManager moduele = new ModuleManager();
moduele.Add(mod);
moduele.Add(new WebCallServerModul(serverDirInfo));
serverLinsener = new HttpServer(moduele);
serverLinsener.AllowedSslProtocols = System.Security.Authentication.SslProtocols.Ssl3;
}
private void mod_ItemEntrance(object sender, Item e)
{
if (ItemEntrance != null)
ItemEntrance(sender, e);
}
public event EventHandler<Item> ItemEntrance;
public void Start()
{
serverLinsener.Start(IPAddress.Any, 2241);
}
public void Stop()
{
serverLinsener.Stop();
}
//---------------------------------------------------------------------------------------------------------
internal class WebCallServerModul : HttpServerModulBase
{
private DirectoryInfo serverDirInfo;
public WebCallServerModul(DirectoryInfo serverDirInfo)
{
this.serverDirInfo = serverDirInfo;
}
public override void Get(Uri uri, Stream output, out int res, out long resL)
{
serverDirInfo.Refresh();
if (serverDirInfo.Exists)
{
FileInfo fileAdress = new FileInfo(serverDirInfo.FullName + uri.LocalPath.Replace("/", "\\"));
fileAdress.Refresh();
if (!fileAdress.Exists)
{
InterWebCall(uri, output, out res, out resL);
}
else
{
res = 0;
resL = 0;
}
}
else
{
Log.WriteLine(serverDirInfo.FullName + " - Not Exist");
InterWebCall(uri, output, out res, out resL);
}
Log.WriteLine($"Request - {uri.ToString()} > {res}");
}
public override void Post(Stream file, IPAddress quelle, Dictionary<string, string> parameter)
{
}
private void InterWebCall(Uri uri, Stream output, out int res, out long resL)
{
string regName = uri.LocalPath.Replace("/", "\\");
if (regName.Contains("upload"))
{
byte[] uploadPage = ShareAndReceive.Properties.Resources.upload;
output.Write(uploadPage, 0, uploadPage.Length);
resL = uploadPage.Length;
res = 200;
}
else if (regName.Contains("info"))
{
long i = output.Position;
XmlDocument infoXml = new XmlDocument();
XmlElement main = infoXml.CreateElement("Info");
XmlElement id = infoXml.CreateElement("ID");
XmlElement name = infoXml.CreateElement("Name");
id.InnerText = "1232";
name.InnerText = Dns.GetHostName();
main.AppendChild(id);
main.AppendChild(name);
infoXml.AppendChild(main);
infoXml.Save(output);
resL = output.Position - i;
res = 200;
}
else if (regName.Contains("ICON"))
{
long i = output.Position;
ShareAndReceive.Properties.Resources.SR.Save(output);
resL = output.Position - i;
res = 200;
}
else if (regName.Contains("background"))
{
long i = output.Position;
Random random = new Random();
switch (random.Next(1, 6))
{
case 1:
ShareAndReceive.Properties.Resources.Background1.Save(output, ImageFormat.Jpeg);
break;
case 2:
ShareAndReceive.Properties.Resources.Background2.Save(output, ImageFormat.Jpeg);
break;
case 3:
ShareAndReceive.Properties.Resources.Background3.Save(output, ImageFormat.Jpeg);
break;
case 4:
ShareAndReceive.Properties.Resources.Background4.Save(output, ImageFormat.Jpeg);
break;
case 5:
ShareAndReceive.Properties.Resources.Background5.Save(output, ImageFormat.Jpeg);
break;
case 6:
ShareAndReceive.Properties.Resources.Background6.Save(output, ImageFormat.Jpeg);
break;
default:
ShareAndReceive.Properties.Resources.Background1.Save(output, ImageFormat.Jpeg);
break;
}
resL = output.Position - i;
res = 200;
}
else
{
res = 404;
resL = 0;
}
}
}
ASP.net ist wenn ich es richtig sehe keine API sondern ein Services ähnlich wie PHP. Es ist schon ein kompletten Server mit Infrastruktur.
ASP mit PHP zu vergleichen is schon spannend.
Nein, das ist nicht im Ansatz richtig. PHP kann ungefähr 10% von dem, was ASP.NET kann und wofür es gedacht ist.
Griffen hingegen ist nur das https Protokoll. Ich übernehme die Infrastruktur. Sowas suche ich.
Gut, das jetz als "API für HTTP" zu beschreiben is durchaus interessant - aber ja, dafür gibts zB Kestrel.
Ja, Kestrel kennt Dependencies von ASP.NET Core - kann aber ohne ASP.NET Core betrieben werden - vice versa.
Quasi alle neue Runtime-Frameworks von Microsoft basieren auf Kestrel (ASP.NET Core, YARP...) wie auch mehrere Azure Services.
Das was ich dann auch noch sehe ich muss das ASP Framework mitliefern für die Installation.
Nein, so funktioniert modernes .NET nicht. Sowas wird ohnehin nicht installiert, sondern ist Teil Deiner Bits. Sowas nennt sich Self Contained.
Warum Du den gezeigten Code mit Modulen etc umsetzt... versteh ich nicht.
Sowas kann man binnen weniger Zeilen mit ASP.NET Core direkt einfach, stabil, simpel machen und braucht nicht irgendwelchen (toten?) Libs.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Warum Du den gezeigten Code mit Modulen etc umsetzt... versteh ich nicht.
Sowas kann man binnen weniger Zeilen mit ASP.NET Core direkt einfach, stabil, simpel machen und braucht nicht irgendwelchen (toten?) Libs.
Die Module übernehmen verschiedene Aufgaben. Das eine ist der SOAP Services und der andere ist die Web Oberfläche.
Mir fehlt es gerade die Vorstellung. Hast du dafür ein Beispiel?
Grüße,
Da Jetzt nichts kam habe ich mal nach was gesucht, und bin darauf gestoßen : https://stackoverflow.com/questions/1651406/programmatically-starting-an-http-server-in-c
Bin mir nicht so sicher ob das damit gemeint wurde. TLS/SSH bekam ich damit noch nicht zum laufen.
MfG
Wundert mich jetzt nicht unbedingt, wenn Du einen fast 15 Jahre alten Link als Referenz nimmst und dann sagst es geht nicht. 2009 hatten wir noch .NET 3 oder .NET 3.5 - also weit bevor es ASP.NET Core in 2015 gab, geschweige denn Kestrel bzw. in der heutigen Form seit 2021.
Mach doch mal das ASP.NET Core Tutorial durch, wenn Du selbst sagst Du hast damit noch nie gearbeitet?
Die Doc is ausführlich und sehr groß - und das ist gut so.
Deine Fragen dürften in den ersten Einsteigerkapiteln beantwortet werden plus nen paar Google-Suchen wie kestrel https certificate
Kestrel - Configure HTTPS
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Im einfachsten Fall kannst du bis auf die SOAP Services alles mit Plain C# und ASP .NET Core machen.
SOAP solltest du im Idealfall einfach ersetzen, ist nicht mehrZeitgemäß und wegen XML mit ziemlichen Overhead.
Microsoft selbst hat SOAP im Grunde aufgegeben weil es technisch kaum noch sinnvoll ist.
Hier haben sich REST Apis einfach als bessere Alternative durchgesetzt.
T-Virs
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.