Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von inflames2k
Thema: WCF Authentication Header
Am im Forum: Web-Technologien

Haben es jetzt so gelöst, dass das generierte Soap in etwa dem entspricht, was Asmx-Webservices auch generieren, durch Verwendung von MessageContracts.
Ist zwar ein wenig Klassen-OVerhead im Dienst, dafür bleibt die Client-Anbindung einfach.

Thema: WCF Authentication Header
Am im Forum: Web-Technologien

Hallo,

für normale Webservices ("Service.asmx") nutzen wir einen Authentifizierungsmechanismus mit einem "ServiceAuthenticationHeader". Für ein aktuelles Projekt brauchen wir dies auch für WCF Services.

Das wichtige ist, dass der SoapHeader genauso aussehen soll wie beim normalen Webservice.


<Header>
    <ServiceAuthHeader>
         <UserID>...</UserID>
         <Password>...</Password> 
    </ServiceAuthHeader>
</Header>
<Body>
</Body>

Das funktioniert soweit, wenn ich im Client den ServiceAuthHeader noch mal bekannt mache und als MessageContract bekannt gebe. Dann kann ich den Header mit Hilfe von folgendem hinzufügen:


using (ServiceClient client = new ServiceClient())
{
    using (OperationContext ctx = new OperationContext(client.InnerChannel))
    {
        ServiceAuthHeader header = this.GetAuthHeader();
        System.ServiceModel.Channels.MessageHeader authHeader = System.ServiceModel.Channels.MessageHeader.CreateHeader("ServiceAuthHeader", string.Empty, header);
        System.ServiceModel.OperationContext.Current.OutgoingMessageHeaders.Add(authHeader);

        // execute service call
        // ...
    }
}

Das unschöne daran ist, dass der Aufrufer die ServiceAuthHeader-Klasse quasi selbst noch einmal entwickeln muss mit den entsprechenden Eigenschaften. Gibt es hier einen Weg, wo svcutil den Header schon im Client-Proxy mit generiert?

Bei dem ganzen handelt es sich um eine Schnittstelle für einen externen Dienstleister. - Daher wollen wir es diesem nun auch nicht unnötig schwer machen den AuthHeader abzubilden.

Bei einfachen Webservices reicht es in der Service.asmx.cs den ServiceAuthHeader als Property hinzuzufügen.

Thema: 2 Xml Dateien vergleichen und Unterschiede speichern
Am im Forum: Datentechnologien

Hallo BhaaL,

das hatte ich auch schon gefunden. Allerdings ist das Diif Ergebnis dort jetzt nicht wirklich brauchbar bzw. sehr komplex.
Bei Unterschieden in den Werten gibt er nur die Indizes der Knoten aus, die sich geändert haben und den neuen Wert.

Habe nun basierend auf Palladin007's Vorschlag eine aktuell gut funktionierende Lösung gefunden.

Ich danke an der Stelle schon einmal.

Thema: 2 Xml Dateien vergleichen und Unterschiede speichern
Am im Forum: Datentechnologien

Verwendetes Datenbanksystem: XML

Für ein aktuelles Projekt muss ich ein Xml-File mit seinem Vorgänger vergleichen und alle Änderungen zusammenfassen.
Dabei sollen teilweise Xml-Knoten beim Vergleich ausgeschlossen werden.

Im Ergebnis sollen anschließend n-Xml Dateien raus kommen, die jeweils den geänderten Knoten und den alten sowie neuen Wert und alle ignorierten Werte enthält.

Beispiel:

Vorher:


<Data>
    <Buffer>10</Buffer>
    <Status>1</Status>
    <ReadTime>dd.MM.yyyy HH:mm:ss</ReadTime>
</Data>

Nachher:

<Data>
    <Buffer>20</Buffer>
    <Status>1</Status>
    <ReadTime>dd.MM.yyyy HH:mm:ss</ReadTime>
</Data>

Im Ergebnis soll jetzt folgendes ausgegeben werden:

<Diff>
    <NodeName>Buffer</NodeName>
    <PreviousValue>10</PreviousValue>
    <CurrentValue>20</CurrentValue>
    <Data>
           <Buffer>20</Buffer>
           <ReadTime>dd.MM.yyyy HH:mm:ss</ReadTime>
    </Data>
</Diff>

Bei dem flachen Xml kein Problem. Das wird straight forward runterprogrammiert und die Xml Knotenweise durchgegangen. Die Knoten aus der alten Xml werden dann mithilfe des NodeNamen aus der neuen gelesen.

Allerdings habe ich einen Knoten im Kopf, wie ich das bei Xml-Dateien bewerkstellige, die eben nicht flach alle Informationen auf einer Ebene haben. Hat hier jemand eine Idee bzw. einen Vorschlag?

Thema: mit Task.Factory.StartNew eine class aufrufen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen


Aber meiner Erfahrung nach hat DataBinding auch so seine Tücken in MultiThreaded Szenarien.

Ich scheitere z.B. trotz Jahrelanger Erfahrung in der Entwicklung immer noch daran, in Windows Forms eine vernünftige Synchronisierung hinzubekommen. Denn nur davon, dass ich meine BindingList oder ähnliches ans Grid pappe kann ich trotzdem nicht einfach in einem anderen Thread Einträge bearbeiten, entfernen und hinzufügen ohne das mir eine entsprechende Exception um die Ohren fliegt.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Noch mal zu den Board und Thread Status. Es gibt ja den Link "Forenbereich als gelesen markieren.". Der funktioniert auch erst mal soweit. Alle ungelesenen Themen werden als gelesen markiert. - Auch das Board selbst bekommt den gelesen Status.

Allerdings habe ich gestern erst einmal alle auf gelesen gesetzt. Heute sind diese wieder als ungelesen markiert. Hat das noch jemand oder liegt das an mir?

Thema: BinärDatei lesen mit festen Positionen und einem Start-"SuchText"
Am im Forum: Rund um die Programmierung

Kennst du denn die groben Bytepositionen? Dann würde ich das File einlesen und dann die entsprechenden Bytes auslesen.
Andernfalls wird es schon schwieriger, wenn du tatsächlich über bestimmte Inhaltsmuster gehen musst.

Thema: Wie aktuelles Datum in einen Json String einbetten?
Am im Forum: Grundlagen von C#

Indem du statt dem festen Datum z.B. DateTime.Now rein gibst.
Das hat jetzt aber im allgemeinen nix mit JSON sondern mehr mit Grundlagen zu tun.

Allgemein solltest du versuchen statt das Objekt selbst zusammen zu bauen mit JSON Serialisierung zu arbeiten.

Thema: DLL mit Form-Vererbung läßt sich von VS nicht laden
Am im Forum: GUI: Windows-Forms

Huh, sehe grade das scheint ein Bug in VS zu sein. Hab einfach mal versucht ein geerbtes Formular zu erstellen. Und siehe da. Gleicher Fehler (hier: VS Professional 2017).

Ich empfehle dir ohnehin: Verweise auf die Bibliothek mit dem BaseForm, erstelle ein neues Formular und ändere den Basistyp von Form auf dein BaseForm.

Damit solltest du allen ärger aus dem Weg gehen.

Thema: DLL mit Form-Vererbung läßt sich von VS nicht laden
Am im Forum: GUI: Windows-Forms

Das klingt von der Fehlermeldung her, als ob du eine Unmanaged DLL z. B. in C++ vorliegen hast.

Eine normal in C# oder C++/CLI Assembly (DLL) sollte sich Problemlos einbinden lassen.

Thema: Oracle Client Komponenten für Applikationen/.net
Am im Forum: Datentechnologien

Im .NET Umfeld empfehle ich den Oracle.ManagedDataAccess aus den Oracle-Komponenten. Ein großer Vorteil bei diesem ist nämlich dass bei richtiger Verwendung gar keine Oracle Client Installation auf dem Zielsystem erforderlich ist.

Denn die korrekte Installation des Oracle Clients ist auch immer so eine Sache. Vor allem, wenn man den x86 und den x64 Client benötigt.

Thema: DB-Verbindung schlägt fehl
Am im Forum: Datentechnologien

Hast es denn mal auf einem Windows Rechner probiert?

Finde leider auch nur Beiträge, wo Leute nach dem Update auf Version 2 der Microsoft Datenprovider Fehler hatten. - Möglicherweise liegts daran? Hast du mal eine ältere Version des Packages probiert?

Thema: Konsolenanwendung mit TCPListener läuf als Dienst nicht korrekt
Am im Forum: Netzwerktechnologien

Zitat von TomRie
@inflames2k, in der Konsolenapplikation ohne Service gibt es doch noch gar keinen DataProcessor.

Nun, wenn du deinen eigenen Code nicht liest. Dann verstehe ich die Wurzel der Probleme.
Zitat von TomRie
Dass der Service "und nur der Service (inkl. DataProzessor)" nicht für diese Art Anwendung geeignet ist sage ich ja schon lange, daher muss ja etwas anderes her.

Ja genau. - Nämlich die korrekte Variante ohne Timer. - Was passiert denn wenn du deinen DataProcessor direkt ausführst statt über den Timer? - Dort sollte man ansetzen den Fehler zu suchen und nicht irgendetwas Wild mit Timern dahinter zu Frickeln damit überhaupt was startet.
Zitat von TomRie
Übrigens wenn das gezeigte nur als Konsole ausgeführt wird, kommt der Timer entgegen deiner Ansicht gar nicht zum Zug, nur beim auführen des Services. Das erkennt man kurzerhand im Beispiel über den Link.

Das habe ich auch nie behauptet. - Im Gegenteil. Ich habe dich drauf hingewiesen, dass er ja dort - wo dein Programm funktioniert - eben nicht zum Einsatz kommt.

Nun weiß ich auch, wo das ganze Problem her kommt. - Du schreibst leider nur ab, was in der Anleitung vorgegeben ist ohne dir weitere Gedanken darüber zu machen. Für den in der Anleitung verwendeten Anwendungsfall [der auch nur ein Beispiel ist] macht der Timer natürlich sinn. - Für deinen Fall aber nicht. - Also als erstes Weg mit dem Timer. Danach können wir uns der weiteren Probleme annehmen.

Thema: DB-Verbindung schlägt fehl
Am im Forum: Datentechnologien

Gibt es denn Gründe, warum du den Microsoft.Data.SqlClient nimmst statt den System.SqlClient? Vorallem, wenns mit dem System Provider geht.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Mal ein kleiner Wunsch noch von meiner Seite. Kann der Hinweis, dass ein Beitrag durch den Author bearbeitet wurde etwas dezenter dargestellt werden?

Thema: Konsolenanwendung mit TCPListener läuf als Dienst nicht korrekt
Am im Forum: Netzwerktechnologien

Dein Problem hat nichts. Aber auch gar nichts mit Diensten an sich zu tun. Wenn du das in der Service-Klasse gezeigte in einer Konsole ausführst, wirst du auf genau die gleichen Probleme stoßen.

Der riesen Unterschied den du eben fabriziert hast ist:

  • deine Konsole initialisiert den DataProcessor und führt ihn aus
  • dein Dienst initialisiert alle 10 Sekunden einen DataProcessor und führt ihn aus
Wenn du jetzt noch verstehst, was ich versuche dir zu sagen, solltest du der Lösung für dein Problem schon näher kommen.

Wenn es bei Ausführung ohne den Timer zu Fehlern kommt, dann poste diesen doch mal. - Aber der Timer macht ohnehin wie schon von anderer Stelle angemerkt keinen Sinn.

Thema: DB-Verbindung schlägt fehl
Am im Forum: Datentechnologien

Zitat von Stefan.Haegele
Hat der User überhaupt Zugriff auf die master Datenbank? Versuche doch doch mal mit diesem User per SQL Server Management Studio anzumelden und prfüe ob du Zugriff auf die master Datenbank hast.

Übrigens sollten Systemdatenbanken tabu sein es gibt eigentlich keinen Grund darauf direkt zuzugreifen.

Auch wenn deine Einwände korrekt sind gehe ich immer noch davon aus, dass derartige Sachen nicht zu dem genannten Fehler führen.

Für fehlende Berechtigungen auf eine bestimmte Datenbank wird der SQL-Server und die Client-Bibliothek andere Exceptions. Beispielsweise:

Fehler
cannot open database masterrequested by the login. the login failed


Thema: Konsolenanwendung mit TCPListener läuf als Dienst nicht korrekt
Am im Forum: Netzwerktechnologien

Nach der Beschreibung macht deine MessageReceiverService -Klasse speziell mit dem Timer noch weniger Sinn.

Du erzeugst alle 10 Sekunden einen neuen DataProcessor mit der darunter liegenden Logik. - Wenn ich ins blaue raten sollte knallt dir die Laufzeit dann beim 2. Start deiner Server-Methode die Exception raus, da der Port bereits verwendet wird.

Im Allgemeinen wäre es wohl besser einen Listener-Thread zu verwenden und nicht zyklisch neu den Listener aufzubauen.

Was du im Code machst ist:
1) Server Port öffnen
2) Auf Verbindung warten
3) Kommunikation mit Client

Solang dieser Ablauf jetzt durch rennt, hast du das Problem, dass alle 10 Sekunden ein neuer Listener erstellt werden soll und das ganze noch mal starten soll. Du kannst aber nur einmal auf den Port horchen.

Geschickter wäre es also mit den Asynchronen-Methoden der Netzwerkklassen zu arbeiten und genau eine Listener Instanz zu verwenden.

Thema: DB-Verbindung schlägt fehl
Am im Forum: Datentechnologien

Zitat von glandorf
ersetze mal Database=master mit Initial Catalog=master.

Das sollte normalerweise zu einem anderen Fehler führen. Der Fehler den Platoon da beschreibt tritt dann doch eher schon beim Verbindungsaufbau zur Instanz auf.

Mögliche mir bekannte Ursachen wären:
  • Datenbankserver ist vom PC auf dem die Anwendung läuft nicht erreichbar [möglicherweise anderes Netzwerk]
  • Portfreigaben fehlen
  • Instanzname ist fehlerhaft

Die zu verwendende Datenbank wird ja ohnehin erst im nächsten Schritt verwendet, wenn eine Verbindung grundsätzlich schon mal zustande kam.


Thema: API zu einer Klasse, Grundschwatzfrage
Am im Forum: Grundlagen von C#

Am Ende, wenn es nur für dich bestimmt ist, musst du entscheiden was sinnvoll ist und was nicht.

Von der Beschreibung her, baust du ziemlich viel bereits vorhandene Funktionalität des Frameworks einfach nach. Ob das so gut ist, wage ich zu bezweifeln.

Aber ohne genaue Kenntnis, warum du genau den Weg gehst kann man dir auch schwer Empfehlungen geben.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Achso Ok, das erklärts natürlich.

Hatte das Frame / die Frames der Optik wegen genommen, weil es den Teil etwas abgegrenzt hat. So ists natürlich auch OK.

Ist eigentlich etwas geplant, dass zumindest im Projekte und Snippet Board der Eingangsbeitrag vom Nutzer geändert werden darf? Ich mein normal sollten es ja Power User ohne hin dürfen. - Aber dort posten ja nicht nur Power User.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Hatte es zwar schon an anderer Stelle vermerkt.

Aber durch Änderungen des BB-Code Parsers werden einige Sachen nicht mehr korrekt dargestellt. [Das ist vernachlässigbar]

Allerdings zählen dazu auch Verlinkungen die weggefallen sind. Siehe PS Fritz!Box API - TR-064 Schnittstelle. Da ich den Eingangsbeitrag nun auch aktuell nicht ändern kann, bliebe mir nur der Weg am Ende einen neuen Beitrag mit den Verlinkungen anzufügen.

Thema: Artikelnummer oder Kundenummer fortlaufend in einer Liste vergeben
Am im Forum: Grundlagen von C#

Hallo BerndFfm,

ich war jetzt natürlich davon ausgegangen, dass im Beispiel keine Datenbank beteiligt ist. Bei Datenbankbeteiligung würde ich dann eher zu den Standard DB-Mechanismen für ID's raten.

Thema: Artikelnummer oder Kundenummer fortlaufend in einer Liste vergeben
Am im Forum: Grundlagen von C#

Nun, dann wäre wohl das einfachste den letzten Eintrag zu lesen die Kunden-/Produktnummer auszulesen und anschließend mit Zähler +1 dem neuen Kunden zuzuweisen.

Sind es tatsächlich Listen dann ist der Zugriff doch auch recht einfach.

In Pseudocode.


NeueKundennummer = Kunden[letzter Kundenindex].Kundennummer +1

Thema: Mit Service.asmx auf übergeordneten Ordner verweisen
Am im Forum: Netzwerktechnologien

Hallo,

wir haben ein Webserviceprojekt in dem mehrere voneinander verschiedene Services die gleichen Assemblies verwenden.

Bei der Erstinbetriebnahme haben wir also auch alles im gleichen Pfad abgelegt so dass sie alle die gleiche Grund-URL besitzen.

Vorstellen kann man sich das wie folgt:

D:\Webservices\ERP\
                    Service1.asmx
                    Service2.asmx
                    ...
                    Service[n].asmx

Nun gab es eine Erweiterung der Services und auch einen neuen. Installiert werden soll vorerst nur der neue. Da alle Services die gleichen Assemblies nutzen, würde die Installation bedeuten, dass die Anwendungen die auf die bestehenden Services zugreifen z.T. Probleme kriegen.

Nun war der Gedanke dahin eine Parallel-Installation für den neuen Service durchzuführen und später alles wieder in einem Ordner zu vereinen. Allerdings müssten dann alle Clients wieder angepasst werden.

Gibt es über den IIS oder ähnliches einen Weg, den neuen Service im Pfad
D:\Webservices\ERP_Temp\Service8.asmx
zu installieren, und dennoch über den Hauptpfad und somit die Haupturl zuzugreifen?

Ziel: http://serverurl:port/ERP/Service8.asmx und nicht http://serverurl:port/ERP_Temp/Service8.asmx

Thema: Wie kann ich die verschachtelte Übergabe von unterschiedlichen Parametern vereinfachen?
Am im Forum: Grundlagen von C#

Zitat von Andreas Adler
Verstehe ich das richtig, dass Code-Block "A" bzw. "B" in den Methoden 1 und 2 identisch vorhanden ist, allerdings eben dupliziert, was du vermeiden willst?

Ein bisschen viel Spekulation. Das entnehme ich dem Eingangsbeitrag so nicht.

@derrobin
Wie Abt schon geschrieben hat, kannst du die gleichen Parameter auch noch an 100 weitere Methoden übergeben, wenn diese darin benötigt / ver- / bearbeitet werden.

Erkläre doch mal genauer was du vor hast und warum du denkst die Parameterübergabe irgendwie einkürzen zu müssen.

Thema: Stimmt der Weg zum OOP Code? Was lege ich wo hin?
Am im Forum: Code-Reviews

Hallo,

bitte zitiere keine Vollbeiträge.

Ansonsten: Du musst im ersten Schritt die Kaffeesorten ja nicht in einer Datenbank speichern. Du kannst sie auch erst mal im Code festlegen und später die Datenquelle anpassen.

Thema: Wie kann ich Codeblöcke in eine Methode übergeben?
Am im Forum: Grundlagen von C#

@T-Virus:

Huch. Kommt davon wenn man nicht noch mal sauber drüber liest.
Danke.

Thema: Wie kann ich Codeblöcke in eine Methode übergeben?
Am im Forum: Grundlagen von C#

Hallo,

aufbauend zu dem was Spook schrieb, könnte man das eventuell noch universeller machen.

Beispiel:


public static void Repeat(Action action, int count)
{
     for(int i = 0; i < count; i++)
          action();
}

public static void Main()
{
      Repeat(PrintDate, 5);
}

private static void PrintDate()
{
     Console.WriteLine(DateTime.Now.ToString());
}

Thema: Multi Platform UI für .NET (aka .NET MAUI)
Am im Forum: Szenenews

Im Heise Artikel dazu hieß es auch, Linux sei nicht implementiert, man überlasse das der Community.

Das bedeutet aber nicht, das Linux nicht unterstützt wäre sondern dass eben die Plattformspezifische .NET MAUI Implementierung nicht von M$ sondern von der Linux Community geliefert werden.