Laden...
Avatar #avatar-3191.gif
MarsStein myCSharp.de - Experte
Sr. Softwareentwickler (ophthalmologische Lasersysteme) Trier -> München Dabei seit 27.06.2006 3.170 Beiträge
Benutzerbeschreibung

Forenbeiträge von MarsStein Ingesamt 3.170 Beiträge

30.07.2015 - 09:57 Uhr

Dazu ist mir gleich das klassische "Pie-Chart" eingefallen:

14.07.2015 - 12:13 Uhr

Hallo,

schau mal in RichTextBox.Find-Methode (String)

Da steht unter Hinweise im gelb hinterlegten Kasten:

Die Find-Methoden, die einen string als Parameter annehmen, können keinen Text finden, der sich über mehrere Textzeilen in der RichTextBox erstreckt. Der Rückgabewert eines solchen Suchvorgangs ist -1.

Dann ist es nicht verwunderlich, dass Du kein Ergebnis bekommst, wenn Du ausgerechnet nach dem Zeilenumbruch suchst...

Gruß, MarsStein

10.07.2015 - 17:41 Uhr

Hallo,

das hat mich gerade an einen alten Thread erinnert, den wir hier mal hatten, und dessen Thema in dem Zusammenhang auch interessant sein könnte:

Was ist ein Wort?

Viele Grüße

07.07.2015 - 20:37 Uhr

Hallo,

ganz sicher ist es nicht das Schlechteste, sich diesbezüglich an die Field Design-Guidelines von Microsoft zu halten - die übrigens ziemlich genau dem entsprechen, was Abt un Taipi88 sagen.

Es werden lediglich 2 Ausnahmen von dieser Regel gemacht, und die betreffen const und static readonly Felder.

DO use constant fields for constants that will never change.
The compiler burns the values of const fields directly into calling code. Therefore, const values can never be changed without the risk of breaking compatibility.

DO use public static readonly fields for predefined object instances.
If there are predefined instances of the type, declare them as public read-only static fields of the type itself.

Wichtig dabei ist aber, zu beachten, was da auch noch steht:

DO NOT assign instances of mutable types to readonly fields.

Ein Beispiel für solche Ausnahmen wäre etwa folgendes (vorausgesetzt struct Angle ist immutable implementiert):

public struct Angle
{
    // unveränderliche!! Konstanten
    public const double DegreesInRightAngle = 90.0;
    public const double DegreesInStraightAngle = 180.0;
    public const double DegreesInFullTurn = 360.0;

    // vordefinierte Instanzen
    public static readonly Angle RightAngle = Angle.FromDegrees(DegreesInRightAngle);
    public static readonly Angle StraightAngle = Angle.FromDegrees(DegreesInStraightAngle);
    public static readonly Angle FullTurn = Angle.FromDegrees(DegreesInFullTurn);

    // weitere Implementierung der struct
    ...
}

Gruß, MarsStein

30.06.2015 - 12:34 Uhr

Hallo,

dem Link von inflames2k zufolge ist es so:

Geschachtelte Top-Level-Klassen oder -Interfaces sind wie die Paketbestandteile direkt für andere Klassen verfügbar. Es ist nicht erforderlich, zunächst ein Exemplar der umgebenden Klasse zu erzeugen.

Wenn das in Java nur geht, wenn die innere Klasse static ist, ergibt das auch einen Sinn.

In C# wären dann aber alle Nested Classes auch geschachtelte Top-Level-Klassen, sobald sie public sind, denn da kann man dann munter drauf zugreifen ohne Instanz der äußeren Klasse.

Gruß, MarsStein

Edit: Ich bin generell wie meine Vorredner der Ansicht, dass diese Java-Bezeichnung im .NET-Umfeld so nicht existieren und nicht übernommen werden sollten. Das ergibt keinen Sinn und stiftet nur Verwirrung.

29.06.2015 - 23:59 Uhr

Hallo,

jop, schon mal gesehen: so stehts auch in der C# Language Specification, Abschnitt E.3.1

Unter Mono kompiliert der Code übrigens nicht, das x kriegt er noch hin, das abc führt zu> Fehlermeldung:

The name `abc' does not exist in the current context (CS0103)

Gruß, MarsStein

29.06.2015 - 23:43 Uhr

Hallo,

Wird eine verschachtelte Klasse als static deklariert, dann wird sie zu einer verschachtelten Top-Level Klasse.

Wie kommst Du denn darauf, bzw. was soll das überhaupt bedeuten?
Wenn eine Klasse mit dem Modifizierer static deklariert wird, bedeuted das lediglich, dass auch alle ihre Member static sind (bzw. sein müssen) und somit vollständig ohne Erzeugen einer Instanz darauf zugegriffen werden kann.
Von wo aus der Zugriff auf was erlaubt ist, wird weiterhin über die Modifizierer public/private/internal gesteuert.

Eine Nested Class ist aber auf jeden Fall eine Nested Class und bleibt auch eine, egal ob static oder nicht.

Gruß, MarsStein

24.06.2015 - 17:53 Uhr

Hallo,

wenn Du ein Click-Event abonnierst, nekommst Du das geklickte Objekt als object sender übergeben.
Dies kannst Du auswerten, um herauszufinden, um welches Control es sich handelt.

Tipp: Halte dir alle Deine dynamischen Controls am besten in einer Liste, darin kannst Du dann nach dem sender suchen.

Gruß, MarsStein

17.06.2015 - 12:58 Uhr

Hallo,

if (i % zahl == 0) // Teiler gefunden

Nein. Siehe Modulo-Operator

Gruß, MarsStein

16.06.2015 - 20:28 Uhr

Hallo,

halte Dich an das was Coffeebean und verwende den Debugger! Dann findest Du Deinen Fehler in wenigen Minuten...

Gruß, MarsStein

16.06.2015 - 19:59 Uhr

Hallo,

genau so hatte ich es gemeint. Ich habe Deinen Code nur ein ganz klein wenig angepasst (nur ein Form, URL hart codiert), und läuft bei mir problemlos:

   public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentCompleted); //1)Handler registrieren
            webBrowser1.Navigate("http://localhost:53646/"); //2) zur Seite navigieren

        }
        private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(DocumentCompleted); //3)den Handler sich selbst deregistrieren lassen
            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentCompleted2);//4)den Handler einen anderen registrieren lassen
            webBrowser1.Document.GetElementById("suche").SetAttribute("value", "myValue");
            webBrowser1.Document.GetElementById("suchestart").InvokeMember("Click");   //5)Formular abschicken
        }
        private void DocumentCompleted2(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            var my = webBrowser1.DocumentText;
            Close(); // <-- hier ein Haltepunkt, dann enthält "my" das Gewünschte
        }

    }

Unter der URL kommt bei mir folgende einfache HTML-Seite zurück:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form method="get">
        <input type="text" value="" id="suche" />
        <input type="submit" id="suchestart" />
    </form>
</body>
</html>

Wie gesagt, das funktioniert! Vom Prinzip her ist das also alles korrekt.

Bei Dir stimmt irgendwas anderes nicht, wo kommen denn Form1 und url her?

Die Instanz von Form1 aus der Du Dein Form2 erzeugst kann an der Stelle ja eigentlich gar nicht bekannt sein...
Ggf. könntest Du auch mal das HTML Deiner Seite posten.

Gruß, MarsStein

16.06.2015 - 18:05 Uhr

Hallo,

So wie Du es gemacht hast, ergibt das auch alles nicht wirklich Sinn.

Du navigierst zuerst zu der Seite.
Dann setzt Du den Handler -> wenn die Seite zu diesem Zeitpunkt schon geladen ist, wird de rHandler nicht mehr ausgeführt, er sollte auf jeden Fall vorher registriert werden.

Anschließend erwartest Du, dass in webBrowser1.DocumentText das Ergebnis steht... die Suchergebnisse sind dann da aber ganz bestimmt noch nicht drin.
Des weiteren wird vermutlich das InvokeMember("Click") dafür sorgen, dass wieder navigiert wird -> dann landest Du erneut in dem Handler, weil er immer noch registriert ist.

Auf die Art wird das ganze eigentlich eher zum Glücksspiel.

Ich würde Dir empfehlen:

  • Handler registrieren
  • zur Seite navigieren
  • den Handler sich selbst deregistrieren lassen
  • den Handler einen anderen (noch zu schreibenden) DocumentCompleted-Handler registrieren lassen, in dem Du das Suchergebnis einsammeln kannst
  • dann (immer noch im ersten Handler) das InvokeMember("Click") aufrufen.

Den Timer brauchst Du dann eigentlich gar nicht mehr. Das Close kannst Du auch in dem zweiten Handler aufrufen wenn das Ergebnis da ist.

Wenn die Suche keine neue Seite lädt, sondern über Javascript die Ergebnisse nachlädt, funktioniert das alles allerdings so gar nicht, dann brauchst Du einen komplett anderen Ansatz.

Gruß, MarsStein

16.06.2015 - 17:06 Uhr

Hallo,

setz den Handler _bevor _Du Navigate(...) aufrufst.
Es gibt allerdings auch Suchmaschinen, die Dich aussperren wenn sie bemerken dass Du automatisiert suchst.

Gruß, MarsStein

16.06.2015 - 17:03 Uhr

Hallo,

bei mir war's damals so, dass in der Präsentation das Abschlussprojekt vorgestellt werden musste (ist halt etliche Jahre her). Falls das bei Euch auch so ist, wird Dir inhaltlich wahrscheinlich keiner was sagen können.
Über die Gestaltung von Folien in Präsentationen findet man ja auch etliches im Netz.
Ich schließe mich da T-Virus an: Viel wichtiger ist, was Du dazu erzählst und wie Du auftrittst.
Du solltest also Deine Präsentation ein paar mal vor dem Spiegel und vor ein paar vertrauten Leuten halten, damit Du etwas Routine damit bekommst.

Gruß, MarsStein

15.06.2015 - 14:26 Uhr

Hallo,

ICommandHandler muss jetzt dem Typ von MoveCustomerCommand entsprechen, richtig?

Fast. Wahrscheinlich meinst Du das richtige, drückst es aber ungünstig aus; genau genommen hast Du jetzt eine Klasse , die Dein Interface so implementiert, dass TCommand aus dem Interface der Typ MoveCustomerCommand ist.
Andere Typen kannst Du da jetzt nicht mehr verwenden (es sei denn sie erben von MoveCustomerCommand)

Gruß, MarsStein

10.06.2015 - 13:45 Uhr

Hallo,

warum hantierst Du da mit geschachtelten Schleifen?
es reicht, wenn Du in der ursprünglichen while(true)-Schleife irgendwo die beiden Zeilen unterbringst:

if (Console.KeyAvailable && Console.ReadKey().Key == ConsoleKey.Enter)
    break;

Gruß, MarsStein

08.06.2015 - 16:46 Uhr

Hallo,

das [return: ...] is tein Attribut und gilt für die Funktion, vor der es steht, bei Dir also genau auf die Funktion IO_read_E.
Dass ein int nicht zu einem AnsiBStr gemarshalt werden kann, ist ja auch nachvollziehbar.

Gruß, MarsStein

zu spät, aber jetzt isses geschrieben...

08.06.2015 - 10:15 Uhr

Hallo,

also, Online-Anwendung bedeutet für mich ja nicht unbedingt, dass es auch eine Webanwendung sein müsste, die im Browser läuft.
Denkbar ist ja auch eine Desktop-Clientanwendung mit einem Online-Service (welcher Art auch immer) als Backend - bei Online-Spielen ist das ja sehr oft der Fall.

Von daher wäre

Sollte ich zunächst eine Offline-Anwendung machen? Ist es dann kein großer Aufwand, eine Online-Anwendung draus zu machen? IMO durchaus eine Option. Dann sollte allerdings in der Offline-Anwendung bereits Schnittstelle existieren, die den späteren Dienst abbildet, und eine Komponente, die diesen Dienst eben zunächst offline implementiert.

Ich denke aber, ich würde aber direkt mit einem Service auf localhost anfangen, dann kannst Du ihn nachher einfach nach "online" verschieben, Host anpassen im Client, und fertig.

Gruß, MarsStein

03.06.2015 - 14:00 Uhr

Hallo,

meinst Du sowas:

if (entities.Vips.Any(v => v.email ==  emailNew.Text))
{
  // existiert
}
else
{
  // existiert nicht
}

Gruß, MarsStein

01.06.2015 - 15:03 Uhr

Hallo,

Deine Konvertierungen greifen nicht, weil Umlaut-Domains in Punycode codiert werden. Siehe auch Webrequest mit Umlaut

Schau Dir mal im Debugger die URL an, wie sie auf dem Server aussieht - wenn da die Umlaute drinstecken, musst Du wahrscheinlich selbst nach Punycode konvertieren.

Gruß, MarsStein

28.05.2015 - 13:11 Uhr

Hallo,

Nun, trotz geschlossenem Stream scheint das Bitmap keine Bearbeitung zu vertragen

Nicht trotz, sondern wegen - Du musst den zugrundeliegenden MemoryStream offen lassen, während Du die Frames ausliest.

Gruß, MarsStein

28.05.2015 - 10:18 Uhr

Hallo,

offenbar handelt es sich um eine Konsolenanwendung?
Damit dort auch Windows-Nachrichten verarbeitet werden, brauchst Du irgendwo in Deiner Anwendung ein Application.Run(), um die MessageLoop zu starten. Beachte, dass diese Methode den Thread, in dem sie aufgerufen wird, blockiert, bis die MessageLoop wieder beendet wird.

Gruß, MarsStein

13.05.2015 - 14:59 Uhr

Hallo,

ich weiß nicht ob esDein Problem löst, aber in Deinem INSERT-Statement sollte statt VALUE VALUES stehen.

Gruß, MarsStein

12.05.2015 - 14:29 Uhr

Hallo Abt,

das war aber gar nicht wertend gemeint - ist dann wohl falsch rübergekommen 🤔
Dass die Fahrzeuge nicht Schuld waren, steht ja im verlinkten Artikel...

Gruß, MarsStein

12.05.2015 - 14:23 Uhr

Hallo zusammen,

um hier mal auf dem aktuellen Stand zu bleiben (und ggf. die Diskussion nochmal etwas voranzutreiben): nun sind schon die ersten Unfälle der Google-Autos bekannt geworden:

Unfall - auch ohne Fahrer möglich

Gruß, MarsStein

07.05.2015 - 00:32 Uhr

Hallo,

Dein RelayCommand muss die ICommand-Schnittstelle implementieren, um es als Command binden zu können.
Im Moment wird der Getter des Commands ausgeführt, und dann müsste es zu einem Fehler beim Binding kommen, weil der Typ nicht passt. Das müsstest Du aber beim Debuggen auch im Output-Fenster sehen.

Gruß, MarsStein

05.05.2015 - 15:03 Uhr

Hallo,

Du hast ja Nerven, so einen Codeblock zu posten...
Ok, zum Problem:
Auf den ersten Blick vermute ich, Du suchst das <div> mit (unter anderen) der CSS-Klasse x-grid3-row-selected.

Gruß, MarsStein

04.05.2015 - 16:57 Uhr

Hallo,

siehe dazu auch C#: Seeking PNG Compression algorithm/library
Da steht zumindest etliches zur Problematik...

Gruß, MarsStein

04.05.2015 - 16:23 Uhr

Hallo,

was genau meinst Du denn mit Optimierung? PNG ist ja ohnehin verlustfrei...

Gruß, MarsStein

04.05.2015 - 14:36 Uhr

Hallo,

Datenzugriffs- und -Persistenzkonzepte (Datenbanken, SQL, XML, File-IO etc.) fehlt noch in der Auflistung.

ASP.NET und WPF/WinForms wird man selten zusammen benötigen. Viele machen das eine oder das andere. Es kann aber sicher nicht schaden, in beiden Feldern auf jeden Fall einen guten / ausbaufähigen Grundstock zu haben.

Und ganz wichtig: Abstraktionsvermögen!

Gruß, MarsStein

02.05.2015 - 18:13 Uhr

Hallo,

mit Bordmitteln geht's auch ziemlich einfach:
Dokument in ein WebBrowser-Control laden, und dann webBrowser.Document.Body.InnerText auslesen.

Gruß, MarsStein

29.04.2015 - 21:33 Uhr

Hallo,

DataMember soll man auf Properties ansetzen

Ist ja zusätzlich auch noch der Fall - sieht jedenfalls so aus als würden hier sowohl die Properties als auch ihre Backingfields attributiert. Das ist definitiv nicht simmvoll und ich könnte mir vorstellen, dass das Probleme macht.

Gruß, MarsStein

28.04.2015 - 16:09 Uhr

Hallo zusammen,

der wichtigste - und genau genommen einzige - Anwendungsfall, bei dem mir das sinnvoll erscheint, ist wenn man Schnittstellen (z.B. zu Komponenten, die in anderen Sprachen erstellt wurden) erfüllen will, und sich dazu an bestimmte Namenskonventionen halten muss.

Dann ist es ein nützliches Feature, dass eine solche Möglichkeit besteht. In allen anderen Fällen würde ich davon aber unbedingt Abstand nehmen!!

Gruß, MarsStein

27.04.2015 - 11:36 Uhr

Hallo,

vielleicht schaust Du mal in FileMode Enumeration was diese Zeile macht:

FileStream localFileStream = new FileStream(localFile, FileMode.Create);

Das erklärt dann auch, wieso Deine lokale Datei anschließend leer ist.

Im Übrigen schließe ich mich weismat an: nutze WebClient.UploadFile

Gruß, MarsStein

23.04.2015 - 10:16 Uhr

Hallo,

müsste eigentlich auch mit einem eigenen DataTemplateSelector als ItemTemplateSelector Deines TabContol funktionieren.

Gruß, MarsStein

17.04.2015 - 15:48 Uhr

Hallo,

Wird dann Speicher in größe des Subklassenobjekts allokiert inklusive der Eigenschaft Herstellername aus der Basisklasse?

Ja, exakt. Denn der Compiler weiss ja schon durch die Vererbung, was das Subklassenobjekt alles erben muss.
Was abstrakte und virtuelle Funktionen angeht, da steckt etwas mehr "Magic" dahinter. Im Prinzip wird eine Tabelle darüber aufgebaut, welche Klasse welche Funktionen überschreibt, so dass zur Laufzeit auch dann die Implementierung der Subklasse aufgerufen werden kann, wenn der Aufruf über die Basisklasse erfolgt.

Gruß, MarsStein

17.04.2015 - 15:28 Uhr

Hallo,

Werden in diesem Fall von beiden Objekten eine Instanz erstellt?

Nein. Du bekommst eine Instanz, die sowohl die geerbten als auch die eigenen Properties/Felder/Methoden enthält.

wird hier auch Speicher für die Eigenschaften der Basisklasse reserviert in diesem Fall für den Hersteller?

Das hängt davon ab, was Du unter "reserviert" versthst, aber grundsätzlich würde ich sagen ja.
Zumindest wird für Member von _Referenztypen _der Speicherbereich zum Ablegen der jeweiligen _Referenz _reserviert (also nur so viel wie eine Speicheradresse eben braucht). Für Werttypen wird soviel Speicher reserviert, dass die Struktur hineinpasst.

Gruß, MarsStein

17.04.2015 - 15:16 Uhr

Hallo,

vor ein paar Jahren waren die Funktionen des Mobile Service noch sehr rudimentär. Damals habe ich es so gemacht, dass ich einen Service geschrieben habe, der über Entity-Framework sich direkt auf die Azure-DB verbunden und dort eine DB angelegt (und regelmäßig aktualisiert) hat. Das ist allerdings sehr unschön wenn man mal Datenbankänderungen hat, was das (Re-) Deployment angeht.

Mittlerweile verbirgt sich aber hinter Mobile Services eine (vollständige??) WebAPI, da müsstest Du eigentlich auch Deine Datenbank anlegen können. Such mal danach im Zusammenhang mit WebAPI.

Gruß, MarsStein

16.04.2015 - 23:25 Uhr

Hallo,

1.

for (int i = 1; i < rows.Count(); i++)

Bei diesem Schleifenkopf wird bei jedem Schleifendurchlauf das komplette IEnumerable enumeriert um es zu zählen!

2.

DataRow row = rows.ElementAt(i)

Damit wird wieder jeweils das ganze Enumerable von vorne enumeriert, jeweils bis zum Element i.

Wenn Du das änderst, klappts bestimmt auch besser mit der Performance.
Nimm z.B. einfach

foreach (DataRow row in rows)

Gruß, MarsStein

30.03.2015 - 21:24 Uhr

Hallo,

für ein vorhandenes WebForms Projekt würde ich empfehlen, Dir MVP (Model View Presenter) anzusehen.
Schau mal in
MVC vs. WebForms für Ergänzung bestehender Anwendung und
Events und Eventhandler in MVP
und natürlich bei der Suchmaschine Deiner Wahl.

Gruß, MarsStein

25.03.2015 - 22:38 Uhr

Hallo,

ok, das kannst Du ja auch machen. Allerdings ist es IMO ungüstig, die query.exe irgendwo rumzukopieren.

Dass Du nicht an System32 kommst, ist ein 32/64bit Problem des Betriebssystems.
Kompiliere Dein Projekt auf jeden Fall für Any CPU als Zielplattform. Und dann sieh zu, dass er Haken "32-Bit bevorzugen" **nicht **gesetzt ist!
Dann sollte Dein Code so wie er ist laufen, ohne die query.exe zu kopieren.

Gruß, MarsStein

25.03.2015 - 21:10 Uhr

Hallo,

muss es ein C#-Programm sein?
Wenn Du einfach nur den Benutzern eine Möglichkeit geben willst, die Abfrage zu machen, ohne den Befehl jedesmal zu tippen, würde ich ein einfaches Konsolenscript bevorzugen, also eine .cmd-Datei, die können die User dann auch einfach doppelclicken.

Gruß, MarsStein

25.03.2015 - 14:25 Uhr

Hallo,

das müsste man eigentlich mit query session /server:SERVERNAME bzw. qwinsta /server:SERVERNAME direkt abfragen können - vorausgesetzt, der Benutzer der die Query ausführt hat die erforderlichen Berechtigungen auf dem abzufragenden Server.

Gruß, MarsStein

Edit: siehe auch http://ss64.com/nt/query-session.html

24.03.2015 - 11:12 Uhr

Hallo,

das wird so nicht klappen.
Schau mal hier: How can I embed an icon onto a shortcut?
Da ist eigentlich alles gesagt.

Gruß, MarsStein

Edit: mir ist gerade aufgefallen, dass die Antwort gar nicht angezeigt wird, wenn man hier den Link klickt 🙁
(Über die Bing-Suche konnte ich sie direkt sehen, ohne angemeldet zu sein).

Die Quintessenz ist: Du musst einen festen Verweis auf das Icon oder die Datei die es beinhaltet haben. Das kann auch ein Netzwerkpfad sein. Das Bild selbst in die Verknüpfung einbetten geht aber nicht.

24.03.2015 - 10:56 Uhr

Hallo,

Ich möchte aber nicht, dass ich den Browser im dem C# Programm habe(Da ich Mozilla nutzen muss).

Dann solltest Du ggf. darüber nachdenken, das Ganze als Mozilla-AddOn zu realisieren.
Ansonsten vielleicht <SHIFT>+<CURSOR LEFT> simulieren, und zwar so oft wie Du Zeichen im Text hast.

Gruß, MarsStein

23.03.2015 - 13:51 Uhr

Hallo,

wie fügst Du denn den Text ein bzw. wie sprichst Du die Webseite an? Per WebBrowser-Control?

Dann schau mal in Markierten Text aus Webbrowser Control abfragen
Die dort erwähnte selection kannst Du auch für Deine Zwecke nutzen.

Gruß, MarsStein

13.03.2015 - 13:38 Uhr

Hallo,

Trivial threadsicher sind Methoden, die nur Parameter und Lokale Variablen verwenden.

Diese Aussage würde ich so nicht unterschreiben.
Trifft IMO nur zu, wenn die verwendeten Parameter alle Value Types (die auch nicht mit ref oder out übergeben werden) sind. Sobald man Referenzen übergibt, ist auch da der Spaß vorbei.

Gruß, MarsStein

edit: OT-color

11.03.2015 - 15:46 Uhr

Hallo,

es wird alles direkt von WCF unterstützt, sowohl REST als auch JSON.

es ist ziemlich einfach, google doch mal "WCF self hosted rest json".

Wichtig ist das UriTemplate, über das Du den REST-Pfad angibst, über den eine Methode angesprungen wird.

Gruß, MarsStein

11.03.2015 - 15:02 Uhr

Hallo,

muss es denn ein WebAPI sein?
Das einfachste wäre IMO ein self-hosted WCF Webservice, der direkt JSON spricht.

Gruß, MarsStein

Edit: Gibts quasi out-of-the-box, ohne weitere Drittanbieterkomponenten

05.03.2015 - 11:19 Uhr

Hallo,

HTML-Code ist ja auch nur ein String und könnte genauso angezeigt werden wie jeder andere String auch...
ich nehme an, Du willst das HTML rendern lassen, wie es ein Browser tut.
Und dann brauchst Du genau das - ein WebBrowser Control in Deinem Tooltip.

Gruß, MarsStein