Laden...

Forenbeiträge von scoKi! Ingesamt 90 Beiträge

24.04.2020 - 14:38 Uhr

Hallo zusammen,

mein Ziel ist es, in einem komplett abgeschotteten Netzwerk eine Spracherkennung zu implementieren. Die verwendete Technologie muss daher (dauerhaft) offline arbeiten können.

Meine Frage bezieht sich konkret auf die Azure Cognitive Services, welche m.M.n. jedoch nie komplett offline betrieben werden können da jede Transkation über diese Services Geld kostet. Ist dies so korrekt?

Folgende Dienste möchte ich nutzen:

Bei beiden Services ist es mir bekannt, dass eigene Modelle trainiert werden können. So sollte es in der Theorie doch auch möglich sein, diese Offline betreiben zu können? Mir ist bewusst, dass die Modelle mit Testdaten trainiert werden müssen um gute Ergebnisse erzielen zu können. Gibt es ein Lizenzmodell welches z.B. ala Prepaid arbeitet? Sodass ich ein gewisses Kontigent an Transaktionen kaufen kann welches dann allmälich aufgebraucht wird? Oder ist dies alles nur Unfug?

Danke und Grüße

02.08.2019 - 08:21 Uhr

Danke für die Antworten.

Ich werde jetzt nicht die Evaluierung für Dich übernehmen

Das ist auch nicht das was ich möchte 😃

... Azure Cognitive Services ...

Danke dass Du mich auf diesen Weg gebracht hast. Da ich bisher keine Erfahrung mit MS-Azure sammeln konnte, war mir nicht klar des es Dienste gibt welche offenbar meinen Anwendungsfall abdecken.

neuronales Netzwerk o.ä. selbst trainieren

Dieser Fakt ist für mein Verständnis wichtig. Danke

Ich denke ich werde mich in den Azure-Dienst CustomVision einarbeiten. Mir ist egal ob dieser online-basiert ist oder nicht, wichtig ist nur dass ich eine eigene Datenquelle / ein eigenes Kontingent an Bildern definieren kann.

Grüße

01.08.2019 - 16:37 Uhr

Hallo zusammen,

wie würdet Ihr aktuell eine Bildsuche implementieren, welche eine eigene Datenquelle verwendet? (Also keine extern Daten von z.B. google / bing etc.)

Beispielsweise ist folgendes gegeben:

  • Datenbank mit 1000 verschiedenen Tieren
    -- Wobei jedes Tier ein eigenes Bild besitzt
    -- Die Bilder gleichen sich nicht in Abstand, Winkel, Auflösung etc.

Ich habe bereits versucht mir ein Grundwissen zu Bildsuche anzueignen, jedoch würde ich gerne eure Meinung zu den bestpassendsten Frameworks / Bibliotheken dazu hören. (Egal ob kostenfrei oder kostenpflichtig)

Wichtig wäre vermutlich(?) dass die Suche CIBR verwendet.

Ich denke, dass ich hierfür auf Frameworks wie ML.NET oder Tensorflow zurückgreifen müsste?

Danke + Grüße

24.01.2019 - 22:42 Uhr

Ich erwarte keine Zauberei.

OK, ich danke für alle Antworten.

24.01.2019 - 22:12 Uhr

Die Anwendung kann aktuell sehr gut damit umgehen. Das Problem ist aktuell nur die Übertragung.

Ich weiß es ist nur nett gemeint mich darauf hinzuweisen, aber das hat nichts mit meiner eigentlichen Frage zu tun.

Macht es Sinn ODATA einzusetzen? Wie gesagt, mein eigentliches Ziel war es die Datenmenge zu komprimieren.

24.01.2019 - 21:16 Uhr

@Abt

Sinn der API ist nicht 1GB an Daten an den Client zu schieben, sondern eben 100000 Einträge. (Die Anzahl ist hierbei variabel und kann durch Parameter verändert werden)

Da jeder Eintrag sich durch eine Menge Informationen identifiziert, ist in diesem Fall so gegeben.

Wie gesagt, es geht hierbei um Auswertungen / Statistiken, welche von der Client-Anwendung erzeugt werden.

Ich möchte dass nochmals kurz zusammenfassen:

  • Gzip kann über
app.UseResponseCompression();

aktiviert werden

  • Muss im Client (Browser) noch irgendetwas durchgeführt werden, sodass die Daten komprimiert werden? (z.B. festlegen von bestimmten HttpHeader?)
  • Benötigt man einen ausgewachsenen Webserver oder ist dies auch rein mittels Kestrel möglich?
  • Weshalb wird nicht empfohlen rein auf Kestrel zu setzen? Bisher habe ich während meiner Forschungsarbeit nichts dergleichen lesen können (Gut, es kann auch sein dass ich etwas übersehen habe)

Im Endeffekt hab ich aber nicht verstanden, was Du genau komprimieren willst.
Wenn Du Gzip bereits aktiviert hast und die Json-Format-Möglichkeiten ausgeschöpft hast.. und auch den Body selbst nicht verkleiner willst... was soll denn noch komprimiert werden können, ohne auf Daten zu verzichten?

--> Gzip hatte ich bisher nicht aktiviert.
--> Json-Format ist bereits minified

Den Body könnte ich theoretisch so manipulieren dass ich gleiche Objekte zusammenfasse und diese aus den eigentlichen Informationen heraustrenne. Im Client müsste ich dann allerdings den gleichen Weg Rückwärts gehen, was technisch zwar machbar ist m.M.n. den (recht großen) Aufwand allerdings nicht rechtfertigt. Genau hierfür möchte ich eben das Result (bzw. aktuell den JSON-String) komprimieren.

24.01.2019 - 16:57 Uhr

@Abt:
Ich möchte den Body komprimieren. Das Result vom Standard-MS-JsonSerializer hat sowieso keine Spaces. (Weshalb ich's auch nicht thematisiert habe)
Diese Middlewares kann ich meines Wissens aber nicht direkt mit Kestrel verwenden, weshalb ein IIS etc On-Top nötig ist. Oder liege ich hier falsch?

@T-Virus:
Konkretes Beispiel:
Die Anwendung erhält >100000-Datensätze durch diesen einen Funktionsaufruf. Jeder Entry hat hierbei ca. 200 Properties (Jetzt mal Flach dargestellt. Diese Informationen liegen verschachtelt vor)

Wenn ich mir die Übermittlung zwischen Server <-> Client anschaue, dann werden über 1GB an Daten übermittelt.

Die Anwendung benötigt so viele Daten da diese diverse Auswertungen / Statistiken durchführt. In Deserialisierter Form habe ich eine (geschätzte) RAM-Auslastung von 50MB. In Serialisierter Form ist der String jedoch wie gesagt > 1GB groß.

24.01.2019 - 16:12 Uhr

verwendeter Webserver: Kestrel
ASP.NET Core Version: 2.1
Angular Version: 7.1.1

Hallo zusammen,

ich würde gerne die Antwort einer WebAPI-Funktion komprimieren. Aktuell wird als Result ein JSON-String verwendet, welcher allerdings in diesem speziellen Fall einen zu großen Overhead besitzt.

Meine Fragen lautet nun:

  • Was ist die beste Art und Weise das Ergebnis dieser einen Funktion umzustellen?
    ---> Soll man manuell die Daten komprimieren?
    ---> Soll man die Serialisierung dem Framework überlassen und allgemein auf einen anderen Serializer setzen? Wenn ja, welchen?
  • Die Daten werden von einer Angular-Anwendung angefragt, weshalb diese dann in der Anwendung auch dekomprimiert werden müssten?

Ich arbeite mich gerade durch folgenden Artikel, jedoch steht dort geschrieben dass die angegebenen Techniken nicht rein mit Kestrel funktionieren. (...Kestrel server don't currently offer built-in compression support)
https://github.com/aspnet/Docs/blob/master/aspnetcore/performance/response-compression.md

Danke

02.10.2018 - 14:06 Uhr

... es läuft jetzt... Ein Neustart vom Buildserver war nötig damit die korrekte SDK-Version gefunden werden konnte 😭

Mein Problem war dass wohl mit der falschen dotnet.exe gearbeitet wurde. Dieses Fehlverhalten konnte ich allerdings nur im Buildagent feststellen, denn lokal (auf dem Server) hat alles wie erwartet funktioniert.

Ich glaube ich hatte auch einen Denkfehler, denn der .NET Installer-Task ist -glaube ich- nur für hosted Agents. (das macht ja auch irgendwie Sinn)

Danke

02.10.2018 - 13:11 Uhr

Es ist die korrekte Version vom .NET Core SDK installiert. (siehe Anhang)

Hier noch der Inhalt von meiner global.json

{
    "sdk": {
        "version": "2.1.402"
    }
}
02.10.2018 - 11:26 Uhr

(anbei noch das Bild bzgl. dem Marketplace)

02.10.2018 - 11:24 Uhr

Hallo zusammen,

ich möchte eine ASP.NET-Core Anwendung über meinen Buildserver (tfs2017) erstellen lassen. Während dem

dotnet restore

wird allerdings nicht die globale .NET Core-Version verwendet, was wiederum zu einem Fehler führt. (Der Fehler ist hier nicht relevant)

(die verwendete .NET Core Version habe ich in global.json hinterlegt)

Während meiner Recherche bin auf den o.g. Task gestolpert, welchen ich allerdings nirgends finden kann. Auch die Suche über den Marketplace brachte kein Ergebnis.

Meine Frage lautet nun:
Wie kann ich auf meinem Buildsystem meine .NET Core Anwendung erstellen? Ist der Weg über den o.g. Task der richtige?

Danke + Grüße

13.09.2018 - 15:59 Uhr

@Abt

Bezüglich der Cloud:
Unser Kunde wurde von einem Anwalt diesbezüglich beraten. Da ziehen wir (als Firma) leider den kürzeren wenn wir etwas anderes empfehlen.

Wenn wir versuchen etwas in diese Richtung zu gehen dann wird dies direkt abgeblockt. Diesen Wunsch berücksichtigen wir auch um ehrlich zu sein.

> Aber das ist mehr als OFFTOPIC zum eigentlichen Thema <

13.09.2018 - 15:42 Uhr

@Abt

danke für den Hinweis mit den MS-PowerApps.

Leider sehe ich dies nicht als Möglichkeit, da diese nur online nutzbar sind. (?) Das Problem ist, dass unser Kunde viel mobil arbeitet (und in DE die Netzabdeckung wirklich ein Problem ist) und zudem dieser die DB + dessen Inhalt ausdrücklich nicht in eine Cloud legen will.

13.09.2018 - 15:21 Uhr

Nein, die Daten liegen in einer MS-SQL-DB und werden über Access-LinkedTables in Access dargestellt.

Gepflegt wird dann über die UI von Access. Zudem werden keine Kundenstammdaten gepflegt, sondern (allgemeine)-Stammdaten welche (nach einem internen Test) beim nächsten planmäßigen Update an verschiedene Endkunden verteilt werden.

Im Endeffekt werden die betroffenen Stammdaten über Updateskripte beim Endkunden (zu einem definierten Zeitpunkt) angepasst. (Dies hat aber nicht unbedingt etwas mit meiner urpsprünglichen Frage zu tun)

13.09.2018 - 15:12 Uhr

@inflames2k

Zu SQLDataEdit: leider tritt beim Öffnen der DB direkt eine NullReferenceException auf... 🙄 Mal schauen, evtl. kann man da noch was machen.

Alternativ, was hält dich davon ab selbst ein kleines Tool in der Richtung zu entwickeln...

Klar, daran habe ich auch schon gedacht. Das wird hier intern (ich bin nicht mein eigener Chef) allerdings nur als Notlösung gesehen. Auch darf man nicht vergessen, das Access dazu in der Lage ist Tabellen als Subsets darzustellen (Analog wie ein WPF-Datagrid Child-Objekte darstellen kann)

@Abt
Ich stimme Dir zu.

Bitte erläuter mir aber noch was Du mit "unternehmerische Anforderungen wie Sicherheit und juristische Vorgaben" konkret meinst. Es geht hierbei um die Pflege von Stammdaten. Das sollte in diesen Bereich nicht fallen. Produktivdaten können zudem nicht geändert werden, da diese in einer ganz anderen Datenbank liegen. (Zudem liegen die Produktiv-DBs beim (End-)Kunden, in dessen Intranet sowieso kein Zugriff besteht)

Der Einfachkeit halber kann man sich das ganze Szenario so vorstellen, dass unser direkter Kunde nur seine eigene Umgebung abändern will. Diese Umgebung kann man als Demo / Präsentationssystem verstehen.

Grüße

13.09.2018 - 14:32 Uhr

[DB-System: MS-SQL]

Hallo zusammen,

ich bin derzeit auf der Suche nach einem GUI-Tool mit welchem man den Inhalt von DB-Tabellen ändern kann. (CRUD)
Es ist nicht notwendig (und auch nicht erwünscht) die DB-Struktur (Spalten / Tabellen / Views / Procs / TFV etc...) abändern zu können.

Dieses Tool sollte von einem Laien bedient werden können welcher keinerlei Hintergrundwissen zu SQL besitzt.

Konkret geht es um den Anwendungsfall, dass ein Kunde Daten direkt in einer Datenbank pflegen will. Bisher ist hierbei MS-Access im Einsatz, welches über Linked-Tables auf eine existierende MS-SQL-DB zugreift.

Der Kunde hat diese Arbeitsweise lieben gelernt, da Access recht komfortable Funktionen wie Filtern oder sortieren anbietet. (Ich muss zugeben dass die UI wirklich Intuitiv ist. Das kann im Grunde genommen jeder bedienen)

Bei meiner Recherche habe ich z.T. sehr teure Anwendungen und oft zu komplexe Anwendungen gefunden. Am besten wäre es, so etwas wie Access zu finden.

(Während meiner Suche bin ich auch über das SQL Operations Studio gestolpert. Ich finde es interessant welche Richtung MS hier einschlägt. Evtl. wäre dies ja sogar ein Projekt welches hierfür verwendet werden könnte)

Achtung:
Access soll nicht länger als Mittel-Der-Wahl gelten da dies z.T. Anpassungen an der DB-Struktur nach sich ziehen würde (z.B. hinzufügen einer zusätzlichen TimeStamp-Spalte...)

Danke + Grüße

20.04.2018 - 09:53 Uhr

anbei ein Bild vom Debugging Chrome + VSCode

20.04.2018 - 09:50 Uhr

Hallo zusammen,

es funktioniert nun.

Das Problem war tatsächlich die Eigenschaft sourceMapPathOverrides welche auf das Verzeichnis zeigen muss, in welchem die entsprechenden Code-Dateien liegen (in meinem Fall die .ts-Dateien)
irgendwie auch logisch..

Meine gültige launch.json sieht nun wie folgt aus:

{
    // Use IntelliSense to find out which attributes exist for C# debugging
    // Use hover for the description of the existing attributes
    // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
    "version": "0.2.0",
    "compounds": [
        {
            "name": "ASP.Net Core & Browser",
            "configurations": [
                ".NET Core Launch (web)",
                "Launch Chrome"
            ]
        }
    ],
    "configurations": [
        {
            "type": "chrome",
            "request": "launch",
            "name": "Launch Chrome",
            "url": "http://localhost:5000",
            "webRoot": "${workspaceRoot}/ClientApp/app",
            "sourceMapPathOverrides": {
                "*": "${workspaceRoot}/ClientApp/app/*"
            },
            "sourceMaps": true
        },
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            // If you have changed target frameworks, make sure to update the program path.
            "program": "${workspaceFolder}/bin/Debug/netcoreapp2.0/test2.dll",
            "args": [],
            "cwd": "${workspaceFolder}",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart",
            "launchBrowser": {
                "enabled": false
            },
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "sourceFileMap": {
                "/Views": "${workspaceFolder}/Views"
            }
        }
    ]
}

Zum besseren Verständnis habe ich den wichtigen / geänderten Teil als Screenshot angehängt.

Achtung:
Während meiner Recherche habe ich des öfteren gelesen, dass in der tsconfig.json ebenfalls die Eigenschaft sourceMap auf true gesetzt sein muss! Dies ist bei mir zwar schon der Fall gewesen, but just in case.

Vielen Dank für die Unterstützung

Grüße

19.04.2018 - 19:50 Uhr

Ich denke es liegt an der Property 'sourceMapPathOverrides'.. Ich weis nur nicht so recht welchen Wert ich dort eintragen muss.

Anbei meine jetzige (neue; aus einem anderen Testprojekt) launch.json:

{
    // Use IntelliSense to find out which attributes exist for C# debugging
    // Use hover for the description of the existing attributes
    // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
    "version": "0.2.0",
    "compounds": [
        {
            "name": "ASP.Net Core & Browser",
            "configurations": [
                ".NET Core Launch (web)",
                "Launch Chrome"
            ]
        }
    ],
    "configurations": [
        {
            "type": "chrome",
            "request": "launch",
            "name": "Launch Chrome",
            "url": "http://localhost:5000",
            "webRoot": "${workspaceFolder}",
            "sourceMaps": true,
            "userDataDir": "${workspaceRoot}/.vscode/chrome",
            "sourceMapPathOverrides": {
                "webpack:///./*": "${webRoot}/*",
                "webpack:///src/*": "${webRoot}/*",
                "webpack:///*": "*",
                "webpack:///./~/*": "${webRoot}/node_modules/*",
                "meteor://»app/*": "${webRoot}/*",
                "webpack:///C:*": "C:/*"
            }
        },
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            // If you have changed target frameworks, make sure to update the program path.
            "program": "${workspaceFolder}/bin/Debug/netcoreapp2.0/test2.dll",
            "args": [],
            "cwd": "${workspaceFolder}",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart",
            "launchBrowser": {
                "enabled": false,
                "args": "${auto-detect-url}",
                "windows": {
                    "command": "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
                    "args": "${auto-detect-url}"
                },
                "osx": {
                    "command": "open"
                },
                "linux": {
                    "command": "xdg-open"
                }
            },
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "sourceFileMap": {
                "/Views": "${workspaceFolder}/Views"
            }
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        },
    ]
}

Gestartet wird die Konfiguration "ASP.Net Core & Browser".

Grüße

19.04.2018 - 10:05 Uhr

Servus Coffeebean,

leider hat Dein Blogpost mich nicht weitergebracht.. Das Problem besteht weiterhin.

Was ich in der Zwischenzeit versucht habe:

  • Verwenden der Projektvorlage über das angular-cli (anstelle über dotnet new)
    --> Selbes Problem
    ----> 1. npm install -g @angular/cli
    ----> 2. ng new debugChrome
    ----> 3. cd debugChrome
    ----> 4. ng serve
    ----> 5. code .
    ----> 6. launch.json wie folgt angepasst
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "chrome",
            "request": "launch",
            "name": "Launch Chrome against localhost",
            "url": "http://localhost:4200",
            "webRoot": "${workspaceFolder}",
            "sourceMaps": true
        }
    ]
}

----> 7. Start über F5 (Die Konfiguration 'Launch Chrome against localhost' ist ausgewählt)

Die Breakpoints werden weiterhin nicht gehittet..

  • Forken dieses Projektes welches das Angular Tutorial TourOfHeroes um eine entsprechende launch.json für das Chrome-Debugging erweitert
    --> Selbes Problem

Mich beschleicht das Gefühl dass dies entweder gar nicht (mehr) funktioniert oder ich etwas grundsätzlich falsch mache..
(Falls es wichtig ist: das Debugging meiner .ts-Dateien funktioniert im Browser)

Könnte von euch jemand bei Gelegenheit dies mal versuchen nachzustellen? Nur um auszuschließen dass ich etwas falsch mache.

Danke + Grüße

Nachtrag:

"Setting breakpoints, including in source files when source maps are enabled"
In meinem letzten Versuch habe ich in der launch.json den Wert '"sourceMaps": true' gesetzt, wie in der Beschreibung der Chrome-Extension beschrieben ist. Dies brachte leider auch keine Änderung.

🤔

18.04.2018 - 14:31 Uhr

Servus Regenwurm,

ja, das ist mir bewusst. Ich hätte trotzdem gerne die Möglichkeit in VSCode meinen Typescript-Code zu debuggen.

Ich habe meine launch.json auch testweise mal so angepasst, dass direkt chrome (mit '_--remote-debugging-port=5000 ${auto-detect-url}' gestartet wird.. Dies bringt leider auch keine Besserung.

18.04.2018 - 11:12 Uhr

Ich habe dieses Problem auf einem anderen Rechner nachstellen können....

  1. VSCode in der neuesten Version installiert (Erstinstallation von VSCode)
  2. dotnet new angular
  3. npm install
  4. code .
  5. C#-Extenion installiert
  6. Chrome-Extension installiert
  7. Neustart VSCode
  8. 'launch.json' generieren lassen
  9. Build + Start (F5)
  10. Test der Breakpoints... Funktioniert weiterhin nicht

Ist es überhaupt möglich meinen Typescript-Code in VSCode zu debuggen?

18.04.2018 - 10:49 Uhr

Hallo zusammen,

meine Breakpoints werden aktuell in VSCode nicht gehittet und bisher brachte meine googlerei keine Lösung (Ich habe so das Gefühl dass mehrere Leute das selbe Problem haben bzw. dies ein bekanntes Problem ist? 🤔 )

VSCode: V1.22.2
Chrome: V66.0.3359.117 (Offizieller Build) (64-Bit)

Das Problem ist wohl, dass die Symbole nicht geladen werden konnten. Jedoch weiß ich nicht, wie es möglich ist, dass diese geladen werden?

Die nötige Chrome-Extension habe ich bereits installiert. Die Breakpoints im C#-Code (MVC-Controller) funktionieren dagegen problemlos.

Anbei noch meine launch.json:

{
    // Use IntelliSense to find out which attributes exist for C# debugging
    // Use hover for the description of the existing attributes
    // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            // If you have changed target frameworks, make sure to update the program path.
            "program": "${workspaceFolder}/$unkenntlichgemacht$/bin/Debug/netcoreapp2.0/$unkenntlichgemacht$.dll",
            "args": [],
            "cwd": "${workspaceFolder}/$unkenntlichgemacht$",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart",
            "launchBrowser": {
                "enabled": true,
                "args": "${auto-detect-url}",
                "windows": {
                    "command": "cmd.exe",
                    "args": "/C start ${auto-detect-url}"
                },
                "osx": {
                    "command": "open"
                },
                "linux": {
                    "command": "xdg-open"
                }
            },
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "sourceFileMap": {
                "/Views": "${workspaceFolder}/Views"
            }
        },
        {
            "type": "chrome",
            "request": "launch",
            "name": "Launch Chrome",
            "url": "http://localhost:29685",
            "webRoot": "${workspaceRoot}"
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        },
    ]
}

Für das Debugging nutze ich die Konfiguration ".NET Core Launch (web)".

Chrome ist als Standardbrowser hinterlegt.

Übersehe ich etwas offensichtliches? 🤔 Google ich falsch? 🤔

Danke + Grüße

09.04.2018 - 15:57 Uhr

Ich kann dir InnoSetup empfehlen. Das ist IMHO deutlich(!) einfacher zu handhaben als WIX.

Bisher bin ich zwar mit WIX auch immer ans Ziel gekommen, einfach war das aber zum Teil nicht.

Wenn du mit WIX arbeiten willst, kann ich dir dazu noch WIXSharp empfehlen. Damit kannst du u.a. dein Setup mit einer schöneren/moderneren UI wrappen und bist nicht auf die altbackenden Dialoge vom OS angewiesen.

Grüße

29.11.2017 - 10:54 Uhr

Da nach 206-Hits des Threads nur eine Antwort kam, gehe ich davon aus dass mein Anliegen so spezifisch ist dass es hierfür keine Beispiele etc. gibt. Dann bleibt mir wohl nichts anderes übrig als eine Custom-Lösung anzustreben.

Ich bedanke mich trotzdem bei allen Leuten die sich Gedanken über das Thema gemacht haben.

Ich denke der Thread kann damit geschlossen werden.

Grüße

23.11.2017 - 18:47 Uhr

Würde dass nicht eine Office-Installation voraussetzen? Wenn ja, dann nein.

23.11.2017 - 18:23 Uhr

Hallo zusammen,

ich suche nach einer Möglichkeit simple Oberflächen vom Endkunden (besitzt keine Programmierkenntnisse und ist nicht zwingend Technikaffin) erstellen zu lassen.

Abgrenzung der UI-Funktionalität:

  • Folgende UI-Controls müssen zur Verfügung stehen
    ---- Button
    ---- Textblock / Label oder etwas vergleichbares
    ---- Imagecontainer

Zu den Buttons:
Die Logik dahinter ist sehr einfach gehalten. Es muss nichts weiter getan werden als weitere Buttons (welche auf der selben UI liegen) zu aktiveren / deaktivieren. Zudem muss auf die Buttons ein vordefinierter Style angewendet werden können (--> roter / grüner / blauer Button)

Zu den Textblöcken:
Darstellung von Text. Textgröße muss geändert werden können.

Zu den Imagecontainern:
Gut, sollte klar sein. Es muss ein Bild dargestellt werden können (Liegt auf der Festplatte der Host-Software)

Die erstellte UI läuft nicht als eigenständiges Fenster sondern wird innerhalb eines Containers dargestellt. Ziel dieser Erweiterung ist ein Nachschlagewerk / eine Anleitung für den Benutzer, weshalb es sich fast nur um eine Darstellung handelt. (also sehr wenig logik)

Zur Host-Software:
Es handelt sich um eine (ältere) Windows-Forms-Anwendung. Dort ist eine solche Funktionalität bereits vorhanden, jedoch zu Umständlich und kompliziert, weshalb dies überarbeitet werden soll.

++Mögliche Lösungsansätze: ++
Ich dachte mir dass man einen guten WYSIWYG-HTML-Editor entweder implementieren oder mitliefern könnte. Das Result des Editors könnte dann ganz einfach in der DB hinterlegt und später dargestellt werden. Allerdings sind alle WYSIWYG-Editoren m.M.n. zu komplex.. (zumindest alle welche ich bisher gefunden habe... Für Empfehlungen bin ich dankbar)

Ein weiterer Lösungsansatz wäre den XAML-Designer von VS zu verwenden. Dort könnten dann vom Programmierer diverse Controls in einer lib mitgeliefert werden. (Container / Buttons etc.) Allerdings habe ich noch keine Möglichkeit gefunden den XAML-Designer (bzw. den grafischen Teil) aus VS herauszutrennen... Insofern dies überhaupt möglich ist. (Auch über google habe ich darüber nichts finden können)

Für Ideen etc. wäre ich dankbar

Danke + Grüße

02.06.2017 - 17:09 Uhr

@Abt:

Ist es denn nicht so, dass eine Anwendung, welche nach AnyCPU kompiliert wurde, auf einem x64-System auch nur als 64bit Anwendung läuft, insofern der Haken bei "prefer 32bit" entfernt wurde? Dieser ist meines Wissens standardmäßig gesetzt. (bin gerade unterwegs, kann es demnach aktuell nicht selbst ausprobieren)

Grüße

07.01.2017 - 21:35 Uhr

Hallo zusammen,

ich würde gerne mein Bürotelefon (nicht Bluetooth fähig) mit meinem Bluetooth-Headset koppeln. Das Bürotelefon besitzt einen 2.5mm Klinkenausgang, über welchen ein kabelgebundenes Headset verbunden werden kann.
Über genau diesen Ausgang möchte ich einen Bluetooth-Transmitter anschließen, welcher dann wiederum mit dem BT-Headset gekoppelt werden soll.

Nun zu meinem Problem:
Ich finde leider nur Bluetooth-Transmitter welche ENTWEDER senden oder empfangen können, jedoch nicht beides gleichzeitig.

Könnt Ihr mir Transmitter nennen oder evtl andere Wege um mein Ziel zu erreichen?

Viele Grüße

20.11.2016 - 21:47 Uhr

Danke für die Antworten.
Dass das Repository aufgrund von einem direkten Verbot von WhatsApp nicht mehr gefplegt wird, dachte ich mir bereits. Ich hatte aber leider keinerlei Infos darüber gefunden, auch nicht auf der offiziellen Homepage...

Ich denke, ich werde so vorgehen, dass ich den WhatsApp-Web-Client mit einer simulierten Tastatureingabe ansteuere. Dann bleibe ich auch auf der legalen Seite.

Vielen Dank

👍

20.11.2016 - 10:09 Uhr

Hallo zusammen,

hat es schon mal jemand von Euch geschafft WhatsApp-Messages aus einem eigenen Client heraus zu verschicken? Ich habe mein Glück mit der WhatsAPINet-Library (auch zu finden als NuGet-Package unter 'Whatsapp.NET') versucht, jedoch ohne Erfolg. Alles was ich beim Login zurückbegomme ist ein Auth-Error, welcher keine weiteren Informationen beinhaltet.

Leider scheint es so, dass dieses Repository nicht mehr gepflegt wird, weshalb ich annehme, dass dieses allgemein nicht mehr auf die WhatsApp-API zugreifen kann.

Auf der offiziellen Seite von WhatsApp konnte ich leider keine Informationen für developer finden.. (Ich denke, es ist allgemein nicht gewünscht eigene Clients zu erstellen?)

Ich spiele mit dem Gedanken den Web-Client von WhatsApp mittels simulierter Tastatureingabe zu verwenden, jedoch hätte ich gerne eine anderweitige Lösung.

Bin gespannt auf Eure Antworten.

Viele Grüße

Abschließend noch eine kurze Info zu meinem Vorhaben:
Ich bin in einer WhatsApp-Gruppe in welcher wir Live-Informationen zu einem Dartspiel tickern. Für dieses Dartspiel habe ich eine E-Dart-Scheibe mit einem Raspberry-Pi verbunden, und tracke so die geworfene Punktzahl.
Aktuell ist es so, dass immer eine dritte Person die Infos über WhatsApp an die anderen Leute verteilen muss; Dies möchte ich gerne automatisieren. Den Informationskanal von WhatsApp auf etwas anderes zu wechseln, ist leider nicht möglich.

07.11.2016 - 08:35 Uhr

@Abt:
Ist das so?
Ich verwende in einer meiner Anwendungen selbst einen UDP-Broadcast, und musste bisher auf keinem Rechner eine explizite Ausnahme erstellen.

Wenn ich mich so zurück erinnere, kann ich jedoch bestätigen dass meine Win10-Firewall gefragt hatte, ob ich der Anwendung vertrauen will. Eventuell hat dies automatisch eine Regel hinzugefügt?

05.10.2016 - 08:50 Uhr

Hi Elchi,

und der obere Teil des Fensters? Scroll doch bitte mal nach oben.

Gruß

21.09.2016 - 11:19 Uhr

Die Aussage in der GUI bezieht sich auch auf einen Neustart des Rechners.

Ich habe jedoch in meinen Tests etwas anderes beobachten können:

Starte ich die Anwendung und führe danach das Setup aus, erscheint die o.g. Meldung. Wähle ich jetzt die Option Anwendung nicht schließen (späterer Neustart erforderlich) wird die laufende Anwendung nicht geschlossen. Startet ich die Anwendung nun aber manuell neu (natürlich nachdem das Setup durchgelaufen ist), erscheint mir die neue Programmversion. Eben genauso wie ich's mir wünschen würde
Dies prüfe ich anhand der Programmversion welche in der Assembly hinterlegt ist.

Grüße

Edit:
Achso, ein Systemneustart wird bisher in keinem Fall ausgelöst. Die Aussage des Dialogs bezieht sich - meiner Meinung nach - also nicht auf das System sondern auf die Anwendung.

21.09.2016 - 11:01 Uhr

Hallo zusammen,

ich möchte eine silent-Installation durchführen während die Anwendung aktuell in Verwendung ist. Durchlaufe ich das Setup im GUI-Mode wird irgendwann die Möglichkeit gegeben, die Anwendung nach der Beendigung eben dieser zu aktualisieren. (Siehe Anhang)

Wie erreiche ich jedoch genau dieses Verhalten über die Kommandozeile mit der msiexec.exe?

Ich habe das Internet bereits durchforstet, jedoch keine eindeutige Antwort finden können. Viele sagen dass dies mit der REBOOT-Property ginge, laut MSDN steuert dies jedoch nur den Neustart des ganzen Systems.. Dass ist nicht das was ich möchte.

Viele Grüße,
scoKi!

30.06.2016 - 11:24 Uhr

Ne, ich meinte AppDater (ehemals K_Updater)

Aber danke für den Link 🙂

[EDIT] Ok, nun weis ich wieder weshalb das Projekt eingestellt wurde [/EDIT]

30.06.2016 - 10:04 Uhr

Ok, Danke schon mal.

Die Idee mit dem intelligenten Installer ist super, habe ich bisher gar nicht daran gedacht.

Nur Interesse halber, um nochmal auf den damaligen KUpdater (?) zurückzukommen:
Damals fand eine solche Komponente relativ viel Anklang hier im Forum. Deshalb nehme ich einfach mal an, dass das Konzept, welches dahintersteckte, durchdacht und gut gewesen sein müsste. Weshalb dieses Projekt nun eingestellt wurde, kann ich selbst nicht sagen, mich wundert es nur dass es kein Pendant dazu gibt? 🤔

Grüße 👍

30.06.2016 - 09:30 Uhr

Hi Khalid,

mir ist bewusst dass man Update-MSI-Pakete erstellen kann. Mir geht es aber darum, dass sich die Anwendung aktualisiert ohne dass eine Installation (z.B. Update-MSI-Paket) vom Benutzer angestoßen werden muss.

So etwas wie ClickOnce nur eben als 'vollwertiges' Setup. Wegen mir kann auch ein .MSI-Paket heruntergeladen und dieses Automatisch gestartet werden. Damit dies jedoch funktionieren würde, müsste ich - meiner Meinung nach - einen Webservice aufsetzen welcher die Programmversion mit der aktuell verfügbaren Version gegenprüft, und hieraus dann entscheiden, ob ein Update-MSI oder eine 'vollwertige' MSI heruntergeladen werden müsste. (Entscheid nach minor-Upgrade oder Major-Upgrade)

Dass muss doch leichter / schneller gehen (oder etwa nicht?)

Grüße

30.06.2016 - 09:06 Uhr

Hallo zusammen,

mich interessiert, wie haltet ihr eure Software(-komponenten) aktuell? Es gab hier im Forum mal ein Projekt, welches (soweit ich mich erinnern kann) als Plugin ins eigene Projekt eingebunden werden konnte. (KUpdater??)

Techniken wie ClickOnce vewende ich bereits, jedoch ist hier die Einschränkung gegeben, dass die Installation pro User stattfindet. Was ist nun aber wenn ich meine Anwendung für alle User auf einem Rechner zur Verfügung stellen möchte?

Für eine benutzerübergreifende Installation erstelle ich aktuell ein .MSI-Paket mittels WiX, jedoch fehlt mir hier die Möglichkeit, eine bestehende Installation aktualisieren zu können.

Bin gespannt wie (bzw. ob) ihr das macht 🙂

Grüße

30.05.2016 - 10:06 Uhr

Ich muss ganz ehrlich sagen dass ich von Win10-Mobile überhaupt nicht begeistert bin.

  • Ständig geht meine W-LAN Verbindung verloren. Ein manueller reconnect funktioniert nicht, da hilft nur der Neustart des Gerätes ⚠
  • Bluetooth funktioniert überhaupt nicht. Weder mit der Freisprecheinrichtung in meinem Auto noch mit meinem Soundsystem...

Gut, es geht langsam Bergauf:

  • Die Groove-Music-App ist zumindest nun in der Lage die Lieder zu wechseln. Dies war mir aufgrund eines Softwarefehlers nur bedingt möglich
  • Das Öffnen der Kamera hat sich von 10Sek auf ~2Sek verringert

Vielleicht liegt es an meinem Low-Budget-Gerät (Lumia 550), jedoch hatte (habe) ich den Eindruck dass die Software nicht wirklich getestet war (ist). Schade, denn mit einem alten Lumia 630 hat alles einwandfrei funktioniert und ich war durchaus zufrieden. Es macht zum Teil echt keinen Spaß das Gerät zu verwenden 🙄

(Achja, ich verwende die offizielle Stable-Version des OS)

Grüße

04.02.2014 - 12:06 Uhr

Edit:
Oh, war wohl etwas zu langsam. Anscheinend hatten wir fast den selben Einfall. 👍


Servus Potestas,

wenn ich dich richtig verstehe dann möchtest Du den 'Component'-Bereich aus der URI dynamisch zur Laufzeit abändern, sodass dieser immer auf die aktuelle .dll abzielt?

Ich hatte nämlich eben dass selbe Problem und habe dieses mit einem selbst erstellten ResourceDictionary gelöst.
(Keine Ahnung ob man dieses Problem auch noch anders lösen könnte, mir ist auf die Schnelle kein besserer Weg eingefallen)

Mein ResourceDictionary:


    /// <summary>
    /// Repräsentiert ein ResourceDictionary welches Resources aus der aktuellen Bibliothek heranzieht
    /// </summary>
    public class ThemeResourceDictionary : ResourceDictionary
    {
        /// <summary>
        /// Ruft die URI zur Ressource aus der aktuellen Bibliothek ab oder legt diese fest
        /// </summary>
        public new Uri Source
        {
            get
            {
                return base.Source;
            }
            set
            {
                // Namen der aktuellen Assembly holen (ohne Dateiendung)
                var assemblyName = System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.ScopeName.TrimEnd(".dll");

                // URI so abändern sodass diese auf die aktuelle Assembly abzielt
                var componentName = String.Concat("/", assemblyName, ";component");
                base.Source = new Uri(String.Concat(componentName, value.ToString()), UriKind.RelativeOrAbsolute);
            }
        }
    }

Die Extensionsmethod 'Trim(..')':


    /// <summary>
    /// Beinhaltet Erweiterungsmethoden
    /// </summary>
    public class Extensions
    {
        /// <summary>
        /// Entfernt die Zeichenkette am Ende wenn vorhanden
        /// </summary>
        /// <param name="target">Textzeichenfolge welche manipuliert werden soll</param>
        /// <param name="trimString">Zeichenkette welche entfernt werden soll</param>
        /// <returns>Neue Textzeichenfolge</returns>
        public static string TrimEnd(this string target, string trimString)
        {
            var result = target;
            while (result.EndsWith(trimString))
            {
                result = result.Substring(0, result.Length - trimString.Length);
            }

            return result;
        }
    }

Und zum Schluss noch das ResourceDictionary:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:controls="clr-namespace:NamespaceZumThemeResourceDictionary">

    <ResourceDictionary.MergedDictionaries>
        <controls:ThemeResourceDictionary Source="/Subfolder1/Subfolder2/File.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

Hoffe geholfen zu haben.

Viele Grüße

11.06.2013 - 09:54 Uhr

Hallo,

ich möchte einen WCF-Service einmal in ein WindowsPhone-Projekt (WP8) und einmal in ein WindowsStore-Projekt referenzieren. Nach Möglichkeit soll in diesen beiden Projekten im Background die gleiche Code-Datei geführt werden, welche im Anschluss für die beiden verschiedenen Platformen kompiliert wird.

Jetzt muss ich feststellen dass die asynchronen Methoden des WCF-Diesnstes auf den beiden Platformen unterschiedlich erzeugt werden!

Hierbei gilt:
Für WindowsPhone: "Generate asynchronous operations" (So wie vor .Net 4 mit Events eben)
Für WindowsStore: "Generate task-based operations" (mit async / await)

Leider sind die Radio-Buttons für die Einstellung dieser Option in beiden Projekten ausgegraut, weshalb ich anscheinend die Erzeugung der asynchronen Methoden nicht beeinflussen kann (Siehe Screenshot)

Nun meine Frage: Ist es möglich diesen Weg zu vereinheitlichen? Es soll auf beiden Platformen der selbe Weg verwendet werden.

Gruß

17.07.2012 - 16:12 Uhr

Ok.

Nein, nicht direkt
Für eine Variante solltest du dich entscheiden: (Mindestens) eine Instanz pro Thread oder locking - aber nicht beides.

Aber wieso? 😃 Es ist doch nützlich wenn eine Klasse direkt threadsafe implementiert wird. Man weis doch nie was noch auf einen zukommt 😃

Ich habe eben noch einen kleinen Test bzgl. der Performance von lock() und unter dem Umstand dass nicht mehrere Threads auf den gleichen gesperrten Abschnitt zugreifen durchgeführt.

Der Test bezog sich auf eine simple Addition zweier Variablen, hier das Ergebnis:

Anzahl Iterationen: 1°000°000

  1. ohne lock: 3.3014 MS

  2. mit lock: 56.336000000000006 MS

  3. ohne lock: 2.8887 MS

  4. mit lock: 35.3646 MS

  5. ohne lock: 2.8884000000000003 MS

  6. mit lock: 41.205200000000005 MS

Edit: Habe vergessen zu sagen dass meine CPU mit einem Takt von 3.4Ghz läuft

Wie zu erwarten war, frisst der lock() schon etwas, aber wenn man bedenkt dass sich die Anzahl der Iterationen in meinem Programm ungefähr bei 4000 hält, ist das wirklich nebensache 😃

verwende dazu am besten eine professionelle Library

zum Beispiel?

Grüssle

17.07.2012 - 13:08 Uhr

Und wie soll sich - wenn du allen Threads nur einen Adapter zur Verfügung stellst - durch die Parallelisierung eine Performanceverbesserung einstellen?!?

Ne, du verstehst mich falsch. Jeder meiner threads hat durch seine eigene Instanz meiner DB-Klasse eine _eigene _DB-Connection und dementsprechend auch einen _eigenen _SqlDataAdapter.

'Normalerweise' kann man davon ausgehen dass der Entwickler nur eine Instanz von dieser DB-Klasse erstellt. Wenn nun aber hierrauf mehrere Threads Zugriff hätten, dann müsste man den Zugriff synchronisieren. Aus diesem Grunde wurde hier lock() implementiert.

OK? 😃

Mehrere Verbindungen zur DB benötige ich ja nur, weil ich parallel meine Sql-Commands als Transaktionen ausführen möchte.

Glaubst du, oder misst du?
Ich stelle die These auf, dass es hinterher mindestens genauso flott läuft, wenn nicht gar schneller:
Datenbankconnections werden sowieso vom ConnectionPool gecacht, weshalb sich die Performance an dieser Stelle nicht verschlechtern sollte.

Ich glaube. Ok, ich werds versuchen. Ich denke aber nicht dass dies mein Problem beheben wird. Auf Rückmeldung müsst Ihr allerdings warten. Wie gesagt, der Fehler tritt sporadisch und bisher nur in großen Zeitspannen auf.

Vielleicht noch irgendwelche Ideen?

Grüße

17.07.2012 - 11:55 Uhr

Ich habe den Fehler bisher nicht im Debugger zum greifen bekommen (wie auch, ich lasse ja den Debugger keine 20h laufen 😃), sondern nur über mein Logging auslesen können.

Dadurch, dass eine neue Exception erzeugt wird, geht mir die Zeile verloren. Der Fehler tritt vermutlich in folgender Zeile auf.

this._adapter.Fill(dataSet, tableName);

Und jeder Thread hat auch wirklich seine eigene Connection zur Datenbank?

Ja

Du lockst einen DataAdapter (statt einen neuen zu erstellen bzw. lockfrei auf einen eigenen des Threads zuzugreifen), aber greifst auf eine Connection ohne locking zu.

Die Klasse, in der dieser SqlDataAdapter liegt, repräsentiert eine Datenbank. Wenn nun mehrere Threads gleichzeitig diese eine Instanz nutzen wollen, muss diese Zugriffsstelle ja synchronisiert werden. (Darum hier der lock auf den Adapter)

Meine Threads jedoch erhalten jeweils eine neue Instanz dieser Klasse (jede Instanz öffnet seine eigene DB-Verbindung), weshalb man hier den lock() nicht benötigt.

Zudem dispost du dem DataAdapter das SelectCommand weg, während dieser - wie es aussieht - noch am Leben bleibt.

Zugegeben, das ist wirklich ein Fehler meinerseits 😃 War wohl spät. Allerdings verwundert es mich wieso beim SqlDataAdapter.Fill() dann keine
ObjectDisposedException ausgelöst wird?

Machst du evtl. zu viele Connections auf, ohne sie rechtzeitig zu closen und zu disposen?

Hmm, das weis ich nicht. Die Anzahl sollte ja theoretisch die der Anzahl meiner Arbeitstrheads entsprechen (--> max. 8). Wie kann ich dass denn nachprüfen?

Läuft der Server auf dem gleichen Rechner?

Das ist unterschiedlich. Ich habe hier 2 Testrechner. Einen Entwicklungsrechner und einen SQL-Server. Diese Probleme treten auf beiden Rechnern auf, egal ob das Programm auf dem Server läuft oder nicht.

An deiner Stelle würde ich die Nachforschungen aber mal auf "this._connection" und "this._adapter" konzentrieren und diese besser bei jedem Methodenaufruf neu initialisieren

Hmmm, bei jedem Methodenaufruf neu initialisieren? Ich schätze da wird es zu Performance-Problemen kommen.

17.07.2012 - 10:11 Uhr

Morgen,

Klappt es, wenn nur ein Thread verwendet wird?

Klar klappt das. Das Problem ist ja, dass man nicht genau sagen kann wie lange es klappt. Mal läuft es 10h, mal 40h, mal gibt es gar keine Probleme.

Edit: Habe vergessen zu sagen dass diese Anwendung auf dem Server und 24/7 läuft.

Wenn ja, verwendest du vermutlich an irgendeiner Stelle nicht-threadsichere Objekte in mehreren Threads.

Nein, da bin ich mir sicher. Ich habe überall mit der Umstrukturierung auf Parallele Transaktionen darauf geachtet, nur threadsichere Objekte zu verwenden. An den Stellen wo das nicht möglich war, wird der Zugriff auf die nicht threadsicheren via lock() synchronisiert.

17.07.2012 - 10:00 Uhr

verwendetes Datenbanksystem: MSSQL (Server 2008 R2)

Hallo Leute,

ich habe ein Problem bei dem ich nicht mehr weiter komme.
Meine Anwendung liest in regelmäßigen Abständen (ca. alle 30 sek) Daten aus meiner Datenbank aus. Hierfür werden gleichzeitig mehrere DB-Connections geöffnet und diese in jeweils eigenen Threads verwendet (Benötige ich um parallele Tansaktionen durchführen zu können)

Alles klappt wunderbar bis ich auf einmal folgende Fehlermeldung erhalte.

System.Data.SqlClient.SqlError: Fehler auf Übertragungsebene beim Senden der Anforderung an den Server. (provider: Session Provider, error: 19 - Physische Verbindung nicht einsatzbereit)

So sieht der Code aus welcher die o.g. Exceptions auslöst.


            lock (this._adapter)
            {
                DataSet dataSet = new DataSet();
                DataTable dataTable = new DataTable();
                try
                {
                    using (var command = new SqlCommand(sqlStatement, this._connection))
                    {
                        this._adapter.SelectCommand = command;
                    }

                    this._adapter.Fill(dataSet, tableName);
                    dataTable = dataSet.Tables[tableName];
                    dataSet.Tables.Clear();
                }
                catch (SqlException exception)
                {
                    throw new DataException(String.Concat("Fehler beim Lesen der Daten: ", Helper.GetSqlExceptionString(exception)), exception);
                }

                return dataTable;
            }

An was liegt das? Kann das sein dass der Server aufgrund zu großer Last einfache seine Arbeit verweigert?

Alle Threads werden über die TPL (Parallel.Invoke(..)) erzeugt, somit sollten auf meinem Testrechner maximal 8 DB-Connections geöffnet werden.

Achja, alle Verbindungen welche zum Server geöffnet sind werden nach der Verwendung disposed.

Grüssle

08.11.2011 - 08:17 Uhr

Dass du für den Aufrufer generische Methoden zur Verfügung stellen willst, damit dieser nicht casten musst, ist ja vollkommen in Ordnung. Tu das. Aber intern kannst du genauso gut mit Object arbeiten und bei der Rückgabe mit einem Cast auf T. Davon sieht der Aufrufer ja nichts.

🤔 Genau das meine ich doch 🙂 Ich dachte ihr meint ich soll als Rückgabetyp object verwenden. In diesem Fall müsste aber der Benutzer der Methode jedesmal von Object zu seinem Typ casten. Das wollte ich nicht. Daher die Idee mit der Generischen Klasse.

Ich glaube wir haben aneinander vorbeigeredet 😁

07.11.2011 - 07:11 Uhr

Hi herbivore,

Casts kannst du ebenfalls nur machen, wenn der Typ zur Compilezeit bekannt ist. Dann kannst du aber auch Typparameter verwenden. An den Stellen, an denen die zur Compilezeit nicht bekannt sind (und darüber reden wir ja), kannst du auch keinen Cast machen.

Das ist schon klar, ich wollte mit meiner Aussage mit

Natürlich könnte ich auch nur mit object arbeiten, aber das würde für jeden Funktionsablauf unnötige Casts zur Folge haben.

genau den Cast ansprechen, welcher vom Zurückgegebenen Wert zur Zielvariable nötig ist.
Aus diesem Grund versuche ich das mit einer Generischen Klasse, welche mir dann den Typ zurück gibt, welchen ich als Generischen Paramter übergebe. --> Dann würde dieser "unnötige" cast wegfallen.

Mit anderen Worten: Da wo du die Typen zu Laufzeit kennst, verwende Typparameter. Da wo du sie nicht kennst, verwende Object. Dann brauchst du auch keine Casts, höchsten die zurück auf den Typparameter und die sind unkritisch, wenn deine generischen und untypsieren Kopiermethoden einmal richtig implementiert sind.

😃 Eben das meine ich.

Ich werde mal meinen Lösungsansatz posten wenn das Zeug mal passen sollte 😃

Grüssle