Laden...

Forenbeiträge von Sythus Ingesamt 166 Beiträge

17.08.2010 - 15:18 Uhr

Vielen dank für die ganzen Antworten.

Was mich persönlich etwas daran stört, wenn die Daten beim Server erst gesammelt und dann nochmal weitergeschickt werden ist die Doppelte Arbeit.

Client schickt Anfrage
Server sammelt Datensätze in einer Schleife
Server schickt Daten an Client
Client nimmt die Daten und verarbeitet diese wieder in einer Schleife

Hatte eben gehofft das es ressourcensparender geht.

Aber gut. Die Idee mit der Connection oder den Reader habe ich nun auch aufgegeben.
Die Idee von jelly finde ich auch gut. Allerdings will bzw. muss ich für die Clients eine Art Suche schreiben, damit diese in der Datenbank suchen können.

Das stell ich mir mit einer vordefinierten Funktion etwas schwieriger vor, da die Suchen entsprechend Komplex sein können.

Gruß
Sythus

16.08.2010 - 16:38 Uhr

Hallo zusammen,

ich habe einen WCF Service erstellt und würde nun gerne für meine Clientanwendung einen Datenbank Zugriff zur Verfügung stellen.

Momentan nutze ich SQLite auf dem Server.

Ich frage mich nun in welcher Art und Weise man den Zugriff zur Verfügung stellt?

Schicken die Clients eine SQL Abfrage an den Server, der pakt die Ergebnisse in ein Dictionary Array und sendet das Ergebnis zurück?

Oder gibt es auch eine Möglichkeit den direkten Zugriff zu realisieren?
Quasi den Reader weitergeben, oder die Connection?

Bin für jede Tips dankbar,

schönen Gruß

Sythus

08.07.2010 - 12:56 Uhr

Hallo zusammen 😃

@ Thomas - doch die Dock Eigenschaft ist vorhanden, allerdings nicht im Designer (warum auch immer) - das hatte ich gemeint

@ cat - vielen Dank für den Tip, ich habs damit etwas versucht allerdings mit mäßigem Erfolg. Allerdings stammt der helfende Tip auch aus dem von dir geposteten Beitrag.

Das Load Event bzw. der Code den ich darin ausgeführt habe war verantwortlich für die lange "Ladedauer".
Lasse nun den Code des Load Events in einem Thread laufen. Das hilft schonmal enorm.

Das ich danicht von alleine drauf gekommen bin ist schade^^

Danke an alle beteiligten.

07.07.2010 - 21:52 Uhr

Hallo 😃

ja du hast recht^^ und in Foren neige ich manchmal dazu ein bisschen mehr zu fragen anstatt selbst schnell zu googeln - muss ich mir abgewöhnen, Sorry 😃

Dein Tip war schon super..


            gui.Location = new System.Drawing.Point(0, 0);
            gui.Width = ClientForm.ClientRectangle.Width;
            gui.Height = ClientForm.ClientRectangle.Height;

Nun sehe ich wenigstens nicht mehr wie sich das Control von klein in groß im Form anpasst. Es hat sofort die richtige Größe. Das ist ein Schritt nach vorne 😃

Danke dir.

Dennoch sieht das laden des UserControls zur laufzeit zu sehr nach "aufbauen" aus.
Toll wäre es wenn es sofort angezeigt werden würde. Kann man das evtl. schon im Hintergrund vorladen?

Gruß

07.07.2010 - 21:33 Uhr

Danke schön,

aber das hab ich nicht ganz verstanden. Dem Control kann ich keine Position geben.
Über ClientRectangle gehts, aber ich kann ClientRectangle keinen Wert zu weisen.
Hättest du ein kleines Beispiel für mich?

Danke 😃

07.07.2010 - 19:56 Uhr

Hallo zusammen,

da Usercontrols im Designer nicht die Eigenschaft Dock haben und ich so dem Usercontrol nicht sagen kann das sich dieser an seinen Container bzw. Parent anpassen soll - muss ich dem control nach dem erstellen diese Eigenschaft extra mitgeben.

Nun ist es aber so, das - sobald ich zur Laufzeit ein Usercontrol auf ein Form adden will, ich sehen kann wie das Control erst in der ursprünglichen größe auf das Form gezeichnet wird und dann erst durch Dockstyle.Fill sich an die größe des Außencontainers anpasst.

Diesen Effekt finde ich sehr unschön, da je nach Rechnerleistung das "anpassen" auch mal länger dauern kann.

Gibt es eine Möglichkeit das Control erst unsichtbar zu zeichnen und dann schlagartig anzuzeigen? Ich hoffe man versteht mein Problem.

Das Control wird nicht gleich so wie es sein soll angezeigt. Sondern man sieht wie es sich in dem Container anpasst.

Hier noch ein bisschen Code:


            MeinControl gui = new MeinControl ();
            gui.Dock = DockStyle.Fill;

            MeinForm.innerPanel.Controls.Add(gui);

Ich hab es schon mit visible versucht oder Dockstyle in InitializeComponent() zu setzen und und und... doch überall der gleiche unschöne Effekt.

Ich hoffe man kann mir hier helfen.

Vielen dank schonmal,

Gruß Sythus

24.06.2010 - 14:37 Uhr

Hallo,

danke für die Aufklärung bezüglich der PATH Variable. Die hatte ich ganz vergessen 😃

Es funktioniert nun. Es lag zum einen am XML Namespace und (was mich wundert),
das die XML Node "Runtime" nicht am Anfang der Configurationsdatei geschrieben war.
Am Ende funktionierte nicht.

Danke gfoidl


    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="Unterordner"/>
      </assemblyBinding>
    </runtime>

24.06.2010 - 14:15 Uhr

Hallo und vielen dank an euch 2.

Doch leider bringt mich das noch nicht so richtig weiter. Ich weiß nicht was du mit PATH meinst Herbivore, wo legt man diesen denn fest?

Probing habe ich nun versucht, allerdings ohne Erfolg. Die Assembly wird immernoch nicht gefunden.


    <Runtime>
      <AssemblyBinding>
        <probing PrivatePath="Unterordner"/>
      </AssemblyBinding>
    </Runtime>

Mein vorgehen?
Probing in die config.app eingefügt. Neu kompiliert.
Anwendungs exe und config in einen Ordner. Unterordner Namens "Unterordner" erstellt. Dort die benötigte DLL hinein.
Anwedungs exe gestartet.
-> FileNotFound Exception -> DLL konnte nicht gefunden werden

Sythus

24.06.2010 - 13:52 Uhr

Hallo zusammen,

durch google und die Forensuche habe ich herausgefunden das Assemblys für die Anwendung im Anwendungsverzeichnis oder einem Verzeichnis darunter oder in der GAC liegen müssen.

Nun habe ich folgende Struktur

/AnwendungsOrdner/Anwendung.exe
/AnwendungsOrdner/Einteilung1/Anwendung.Aufgabengebiet.dll
/AnwendungsOrdner/Einteilung2/Anwendung.Aufgabengebiet.dll

Leider werden die DLLs in den Unterordnern aber nicht gefunden. Nur wenn diese im Hauptverzeichnis liegen.

Ich habe Visual Studio 2008.
Müssen da bestimmte Einstellungen vorgenommen werden?

Danke schonmal

Sythus

23.06.2010 - 12:58 Uhr

Vielen Dank 😃 da hab ich auch prompt was drüber gefunden.

Sythus

23.06.2010 - 10:50 Uhr

Hallo zusammen,

wie man HTML Emails versendet ist mir klar, jedoch konnte ich bisher nichts zu einem Alternativtext finden falls der Nutzer keinen HTML - fähigen Emailclienten hat.

Vielleicht suche ich ja falsch.
Hat diesbezüglich jemand einen Tip für mich?

Danke
und schöne Grüße

Sythus

09.06.2010 - 16:03 Uhr

Meistens ist diese Null, doch in ganz wenigen Fällen (warum auch immer) lautet diese:


{System.ServiceModel.CommunicationException: Das maximale Nachrichtengrößenkontingent für eingehende Nachrichten (65536) wurde überschritten. Verwenden Sie die MaxReceivedMessageSize-Eigenschaft für das entsprechende Bindungselement, um das Kontingent zu erhöhen. ---> System.ServiceModel.QuotaExceededException: Das maximale Nachrichtengrößenkontingent für eingehende Nachrichten (65536) wurde überschritten. Verwenden Sie die MaxReceivedMessageSize-Eigenschaft für das entsprechende Bindungselement, um das Kontingent zu erhöhen.
   --- Ende der internen Ausnahmestapelüberwachung ---

Server stack trace: 
   bei System.ServiceModel.Channels.ClientDuplexConnectionReader.DecodeMessage(Byte[] buffer, Int32& offset, Int32& size, Boolean& isAtEOF, TimeSpan timeout)
   bei System.ServiceModel.Channels.SessionConnectionReader.DecodeMessage(TimeSpan timeout)
   bei System.ServiceModel.Channels.SessionConnectionReader.Receive(TimeSpan timeout)
   bei System.ServiceModel.Channels.SynchronizedMessageSource.Receive(TimeSpan timeout)
   bei System.ServiceModel.Channels.FramingDuplexSessionChannel.Receive(TimeSpan timeout)
   bei System.ServiceModel.Channels.FramingDuplexSessionChannel.TryReceive(TimeSpan timeout, Message& message)
   bei System.ServiceModel.Dispatcher.DuplexChannelBinder.Request(Message message, TimeSpan timeout)
   bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
   bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   bei System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   bei System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   bei IServerFunctions.GetData(String xPath)
   bei ServerFunctionsClient.GetData(String xPath) in E:\Projekte\C#\Allrounder\Allrounder.Client\Proxy.cs:Zeile 84.
   bei Allrounder.Client.Allrounder.Client.Backend.arNewsletterExport.OnCheckBoxChanged(Dictionary`2 checkBoxStatus) in E:\Projekte\C#\Allrounder\Allrounder.Client\Allrounder\Client\Backend\arNewsletterExport.cs:Zeile 85.}

Allerdings nutze ich diese "MaxReceivedMessageSize" Eigenschaft ja und habe diese in den Konfigurationsdateien weitaus höher ausgeschrieben. Warum zeigt er mir diese also mit 65536 an?

Für diese Innerexcetpion muss ich allerdings zahllose abfragen machen bis er diese mal Spuckt^^

09.06.2010 - 13:33 Uhr

Hallo zusammen,

ich habe eine kleine Client- Serveranwendung geschrieben die über WCF, genauer TCP Binding, kommuniziert.
Der Client sendet eine XPath Abfrage an den Server und dieser beantwortet diese mit einer Ergebnismenge die aus

XMLElementen besteht.

Bei kleinen Ergebnismengen < 150 funktioniert das auch sehr gut. Bei größeren Mengen streikt er und es kommt eine ServerFaulted Exception mit der ich nur sehr wenig anfangen kann.


Eine Ausnahme (erste Chance) des Typs "System.ServiceModel.CommunicationObjectFaultedException" ist in mscorlib.dll aufgetreten.
CommunicationError
System.ServiceModel.CommunicationObjectFaultedException: Das Kommunikationsobjekt "System.ServiceModel.Channels.ServiceChannel" kann nicht zur Kommunikation verwendet werden, weil es sich im Faulted-Status befindet.

Server stack trace: 
   bei System.ServiceModel.Channels.CommunicationObject.ThrowIfFaulted()
   bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
   bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   bei System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   bei System.Run"Allrounder.Server.vshost.exe" (Verwaltet): "C:\Windows\assembly\GAC_MSIL\System.ServiceModel.resources\3.0.0.0_de_b77a5c561934e089\System.ServiceModel.resources.dll" wurde geladen
"Allrounder.Server.vshost.exe" (Verwaltet): "C:\Windows\assembly\GAC_32\System.Transactions\2.0.0.0__b77a5c561934e089\System.Transactions.dll" wurde geladen, das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
time.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   bei IServerFunctions.GetData(String xPath)
   bei ServerFunctionsClient.GetData(String xPath) in E:\Projekte\C#\Allrounder\Allrounder.Client\Proxy.cs:Zeile 84.
   bei Allrounder.Client.Allrounder.Client.Backend.arNewsletterExport.OnCheckBoxChanged(Dictionary`2 checkBoxStatus) in E:\Projekte\C#\Allrounder\Allrounder.Client\Allrounder\Client\Backend\arNewsletterExport.cs:Zeile 85.
Ergebnismenge:0

Das sagt mir doch lediglich das der Server in den FaultedModus gewechselt ist. Warum auch immer. Gibt es eine Möglichkeit genauer herauszufinden wo das Problem ist?

Ich habe viel gegoogelt und viel gelesen. Es gibt auch andere Leute mit diesem Problem, allerdings konnten diese das Problem durch definieren der maxArrayLength und maxReceivedMessageSize lösen. Das habe ich auch probiert aber ohne Erfolg.

Hier mal meine Konfigurationsdateien:

Server


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Allrounder.Server.Service.ServerFunctions" behaviorConfiguration="MetadataBehavior"  >
        <endpoint address="net.tcp://127.0.0.1:1337/ServerFunctions" 
                  binding="netTcpBinding" 
                  behaviorConfiguration="Graph" 
                  bindingConfiguration="tcp_Unsecured" 
                  contract="Allrounder.Server.Service.IServerFunctions" />
        <endpoint address="net.tcp://127.0.0.1:1337/mex" 
                  binding="mexTcpBinding" 
                  contract="IMetadataExchange"/>
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="tcp_Unsecured" maxReceivedMessageSize="10485760">
          <readerQuotas maxArrayLength="10485760" maxStringContentLength="2147483647"
                        maxBytesPerRead="10485760" maxNameTableCharCount="10485760"
                        maxDepth="64"/>
          <security mode="None">
            <transport clientCredentialType="None" protectionLevel="None"/>
            <message clientCredentialType="None"/>
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MetadataBehavior">
          <serviceMetadata/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="Graph">
          <dataContractSerializer maxItemsInObjectGraph="10000000"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
  </configuration>

Client


<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding name="NetTcpBinding_IServerFunctions" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
                    hostNameComparisonMode="StrongWildcard" listenBacklog="10"
                    maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
                    maxReceivedMessageSize="10485760">
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                        enabled="false" />
                    <readerQuotas maxArrayLength="10485760" maxStringContentLength="2147483647"
                                  maxBytesPerRead="10485760" maxNameTableCharCount="10485760"
                                  maxDepth="64"/>
                    <security mode="None">
                      <transport clientCredentialType="None" protectionLevel="None"/>
                      <message clientCredentialType="None"/>
                    </security>
                </binding>
            </netTcpBinding>
        </bindings>
        <client>
            <endpoint address="net.tcp://127.0.0.1:1337/ServerFunctions" behaviorConfiguration="Graph"
                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IServerFunctions"
                contract="IServerFunctions" name="NetTcpBinding_IServerFunctions" />
        </client>
        <behaviors>
          <endpointBehaviors>
            <behavior name="Graph">
              <dataContractSerializer maxItemsInObjectGraph="10000000"/>
            </behavior>
          </endpointBehaviors>
        </behaviors>     
    </system.serviceModel>
</configuration>

Ich bin echt am verzweifeln und überlege sogar eine art Querymanager zu bauen der die Ergebnisse in 150ziger Schritten weiterleitet... aber das wäre echt unschön.

Ich würde mich freuen wenn mir hier jemand helfen kann.

Ich nutze Visual Studio 2008 - WCF Beispiele die in VS2010 geschrieben wurden konnte ich nicht zum laufen bringen. Anscheinend wurde da einiges verändert?

Gruß,

Sythus

09.06.2010 - 13:17 Uhr

::1 ist die IPv6 Localhost Adresse.

Ich habe das Problem so gelöst das jeder Client sich beim Server bzw. Service registriert und seinen Namen sowie seine IP direkt mitübergibt.


        public void Register(string name, string ip)
        {
            // Get Client
            OperationContext currentClient = OperationContext.Current;
            
            // New Client Object
            ClientObject client = new ClientObject(name, ip, currentClient);

            this.AddClient(client);
        }

Die Clienten holen sich Ihre IP auf folgende Weise:



public static string GetIPv4Address()
        {
            return Dns.GetHostEntry(Dns.GetHostName()).AddressList.Where(a => !a.IsIPv6LinkLocal && !a.IsIPv6Multicast && !a.IsIPv6SiteLocal).First().ToString();
        }

03.06.2010 - 14:58 Uhr

Danke dir,

also mit Action gehts schonmal nicht... und Func hilft mir glaube ich auch nicht weiter, da der Service bzw. Dienst die Serverklasse nicht kennt und ich so auch keine Methode daraus aufrufen kann.

Ich hatte gehofft das ich das irgendwie über Events hinbekomme. D.h. indem ich in der Serverklasse einfach nen Event registrier.

Das geht ja mit Action ziemlich gut aber leider nur in eine Richtung.
D.h. ich kann ne Methode auf dem Server mit nem ActionDelegaten aufrufen... aber sodass ich von der Methode dann was zurück kriege geht nicht oder?

Trotzdem danke

Gruß
Sythus

03.06.2010 - 14:45 Uhr

Hallo zusammen 😃

Ich habe einen WCF Dienst der die Funktion

XElement GetData(string xPath)

zur Verfügung stellt.

Dienst und Server sind getrennt. Die Daten für die XPath Abfrage liegen aber nur in der Serverklasse.

Das heißt wenn der Client die Funktion GetData des Dienstes benutzt, müsste ich die XPath Abfrage zum Server schicken, dort sollte dann die Abfrage ausgewertet werden und das Ergebnis zum Dienst zurückgegeben werden.

Der Dienst wiederum gibt dann das Ergebnis an die Client weiter.

Pseudocode


Service
{
  public Action<XElement> ActionDelegateGetData(string XPathQuery);

  public XElement GetData(string xPath)
  {

      return this.ActionDelegateGetData(xPath);

  }

}

Das geht natürlich so nicht soll aber verdeutlichen was ich meine. Gibt es eine Möglichkeit einen Action Delegaten zu erstellen der einen Rückgabewert liefert?
Ich finde dazu nichts, glaube also auch nicht wirklich das es sowas gibt.

Aber ich wollte einfach mal fragen. Wie könnte man das Problem denn sonst lösen?

Danke schonmal

und schöne Grüße

Sythus

31.05.2010 - 17:12 Uhr

Crosspost ist für mich das Copy Pasten eines identischen Threads mit genau dem gleichen Inhalt.

Das habe ich nicht getan. Die beiden Threads sind zu unterschiedlichen Zeitpunkten entstanden und der im Filemakerforum kam dazu als ich merkte das es besser ist sich direkt an Leute zu wenden die mit Filemaker zu tun haben.

Allerdings finde ich es nicht verwerflich sich an unterschiedliche Instanzen zu wenden.

Aber gz dafür das du meinen Beitrag gefunden hast-.-

31.05.2010 - 15:52 Uhr

Die 3 Varianten habe ich auch schon versucht. Leider alles ohne Erfolg.

Trotzdem Danke...

31.05.2010 - 15:35 Uhr

Hm ja gut dann kann ich das mit ODBC vergessen...

das Problem scheint auch nicht die Geschwindigkeit der Abfrage zu sein sondern wie schnell Filemaker die Daten durch die Schnittstelle rauspressen kann... und das geht eben nur sehr langsam.

Wegen der Maskierung, wie könnte die denn aussehen?
Habe schon alles versucht.. doch ohne Erfolg. Und in zusammenhang mit Filemaker und ODBC finde ich nirgends einen Hinweis wie man Sonderzeichen der Columns maskieren kann...

danke schonmal vielleicht hat ja noch jemand eine idee

30.05.2010 - 17:14 Uhr

Hallo,

wir nutzen eine auf Filemaker 6 basierende Datenbank. Das ganze Ding ist schon etwas alt, bietet aber Zugang von außen per ODBC.

Schön, dachte ich... dann kann ich mir ja externe Programme schreiben die die Daten unseres DBMS nutzen können... Ich also gleich große Pläne geschmiedet...

Ein Server-Client System soll es sein. Nach einigen rumprobieren mit Sockets wurde ich dann auf WCF gestoßen.
Also einen Server geschrieben, der einen Dienst anbietet. Und einen Client der diesen Dienst nutzen kann.

Kein sehr großer Aufwand soweit.

Der Dienst bietet zb die Methode die eine direkte Abfrage an die Filemakerdatenbank per ODBC senden soll.
Der Server nimmt den SQL Query entgegen, holt sich die Daten aus der Datenbank und sendet sie zurück an den Client.


Als ich ODBC mit Filemaker 6 getestet hatte, habe ich nur eine minibeispiel Datenbank benutzt.. da schien es mir noch recht performant.

Mit der richtigen Datenbank, mit allen Daten dauern die Abfragen enorm lange. (1000 Datensätz - 10 Minuten? Wenn das reicht)
Und das Frontend der Filemaker 6 Datenbank ist kaum nutzbar während dieser Abfragezeit. Ich glaube kaum das in der Zeit andere Mitarbeiter die mit der Datenbank arbeiten abfragen machen könnten.

Außerdem sind einige Datenfelder garnicht abzufragen da es Datenfelder mit den Namen wie Aktiv? oder "Art der Blabla" gibt..


Alles in allem ein Disaster...
Ganz möchte ich aber noch nicht aufgeben und deshalb hier einige Fragen

1.Gibt es eine Möglichkeit den Zugriff auf eine ODBC Datenbank performanter zu gestalten? Unter anderem zum Beispiel die Datenbank nicht so zu belasten?
Oder die Geschwindigkeit zu erhöhen?

Warum baut man einen ODBC Zugang ein wenn dieser garnicht nutzbar ist?

2.Gibt es evtl. doch eine Möglichkeit per SQL Befehl auf solche doofen Sonderzeichen Felder und Feldern mit Leerzeichen zuzugreifen?

Ich sehe das Projekt schon begraben, aber wer weiß vll hat ja jemand eine rettende Idee..

Da die Datenbank schon etwas älter ist genügen deren Formulare und Möglichkeiten nicht mehr aus. Wir haben uns bisher immer mit CSV Exporten geholfen und Programme geschrieben die auf diese Exporte zugreifen. Ich hatte die Hoffnung das das mit ODBC ein Ende hat...

Schöne Grüße und danke für jede Hilfe

Sythus

30.05.2010 - 09:47 Uhr

Hi,

hatte das gleiche Problem.

So hat es bei mir aber geklappt:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Allrounder.Server.Service.ServerFunctions" behaviorConfiguration = "MetadataBehavior">
        <endpoint address="net.tcp://192.168.2.105:1337/ServerFunctions" binding="netTcpBinding"
            bindingConfiguration="tcp_Unsecured" contract="Allrounder.Server.Service.IServerFunctions" />
        <endpoint address="net.tcp://192.168.2.105:1337/mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="tcp_Unsecured">
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name = "MetadataBehavior">
          <serviceMetadata/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Securitymode = None ist vll nicht ganz so schön. Werde es heute mal noch mit "Normal" versuchen..
Danach habe ich mit svcutil einfach die Config für den Clienten erstellt und das verbinden klappte auf anhieb.

Sythus

30.05.2010 - 09:42 Uhr

Nach dem ich einen weiteren "Dienstvertrag" hinzufügte tut er das was er soll... so wie du es sagtest... eine Weitere Verbindung ermöglichen....

Kannst du deine Problemlösung mal etwas mit Code untermauerng das wäre nett

29.05.2010 - 16:03 Uhr

Es gefällt mir zwar nicht sonderlich aber ich habe es nun so ähnlich gemacht.

ich habe dem service die Funktion

bool isAlive()

hinzugefügt.

Die Clients rufen diese Funktion in einer Schleife ab. Kann die Funktion nicht mehr genutzt werden wird eine Exception geschmissen. Die fange ich ab.

isAlive == true -> server bzw service da
Exception -> server bzw service nich mehr da

Danke+Gruß
Sythus

29.05.2010 - 14:16 Uhr

Hallöchen,

Ich sammel die Clients beim Server in einer List... nun dachte ich wenn ich die Clients vom server beende mit client.close() und ich bei dem jeweiligen client auf das close Event warte, ich somit prima feststellen kann wenn der Server seinen Dienst beendet.

Doch fehlanzeige. Ich habe schon alles versucht.
Welche Möglichkeiten gibt es das der Client kapiert wenn der Server seinen Dienst schließt?

Das ganze läuft bei mir über TCP.

Danke für jeden Hinweis

Sythus

28.05.2010 - 18:00 Uhr

Das war zwar nicht meine Frage hat aber trotzdem super geholfen. Danke ^^

Manchmal brauch man nur nen kleinen Stubs aus irgend einer Richtung.

Sythus

28.05.2010 - 10:59 Uhr

Danke,
gibts da irgendwo evtl. nen kleines Beispiel für? Hab schon zig WCF Projekte durchforstet...
Brauch ich dafür eine eigene Eventklasse?

28.05.2010 - 10:45 Uhr

Hallo zusammen,

ich glaube ich steh grad auf dem Schlauch oder sehe den Wald vor lauter Bäumen nicht mehr.

Ich arbeite mich grade in WCF ein. Funktioniert auch alles Prima. Ich habe Ein Projekt der die GUI des Servers stellt und zb den Server starten kann.

Des Weiteren habe ich ein Projekt für den Service.

Nun habe ich eine Funktion im Service die der Client aufrufen soll um Informationen zu senden. (Ip, Port etc).

Diese Informationen soll an die Server-GUI damit ich diese in ein Log - Textfeld eintragen kann.
Doch wie erreich ich die GUI des Servers?^^

Danke für jeden Tip
Sythus

27.05.2010 - 09:08 Uhr

Hallo zusammen und danke für eure Beiträge,

@gfoidl
Ich habe mir nun WCF angeschaut und ich muss sagen das sich das ganze wirkich auf einer ganz anderen Ebene bewegt. Mit dem Transfer von Daten hat man im Prinzip so gut wie garnichts zu tun. Ich bin wirklich begeistert. Nur durch die Callbackfunktionen blicke ich noch nicht so ganz durch. Aber danke für den Tip.

@s4rge
ich hatte sowohl auf Client als auch auf Serverseite auf NullBytes geprüft, sodass ich beim Ausfall eines Servers oder Clients entsprechend darauf reagieren konnte. Deins finde ich aber noch besser, danke 😃 -
An eine Kapselung der Daten in ein Objekt mit ID und vll MessageType hab ich auch gedacht.

@Lynix
Tolles Teil hast du da gebaut, hätte ich mich jetzt nicht WCF zugewendet hätte ich das garantiert benutzt. Danke auch daür.

23.05.2010 - 15:25 Uhr

Hallo,

es klappt nun eigtl. schon ganz gut.

Ich serialisiere mein Objekt und sende es so

            
            List<string> testListe = new List<string>();
            s.Add("huhu");
            s.Add("haha");

            NetworkStream clientStream = client.GetStream();

            BinaryFormatter binaryF = new BinaryFormatter();
            binaryF.Serialize(clientStream, testListe);

und deserialisiere es auf der anderen Seite folgendermaßen


                byte[] data = new byte[1024];
                this.Server.Receive(data);

                MemoryStream MemStream = new MemoryStream(data);
                BinaryFormatter binaryF = new BinaryFormatter();


               var RetObj = binaryF.Deserialize(MemStream);
               MemStream.Close();

Allerdings gibt es da noch ein kleines Problem. Der Server schickt ab und zu auch andere Daten als zb eine Liste über die Sockets, sodass ich auf der Clientseite nie sicher weiß was da nun eigtl. als nächstes an kommt.

Der Client wartet ja schließlich nur auf irgend ein Signal vom Server, wie also feststellen was da ankommt? Klar kann ich das alles in Try Catch Capseln aber das ist nicht so schön.

Gibt es eine Möglichkeit die Daten etwas genauer abzufangen?

Wie handhabt man das denn im Normalfall?

Auch habe ich mal versucht per StreamWriter eine Liste an den Clienten zu schicken. Diese Liste kam tatsächlich auch als List - Objekt beim Clienten an (ohne umwandlung)

Nun Frage ich mich warum Serialisierung und Deserialisierung wenn der StreamWriter Objekte anscheinend direkt ohne Umwandlung über das Netzwerk schicken kann. Hat das was mit der Performance zu tun?

Gruß
Sythus

22.05.2010 - 10:18 Uhr

Danke,

das klingt ja schon sehr interessant.

Ich schreibe meine Daten vom Server in eine Collection, serialisiere sie und schicke sie dann als byte[] los.

Richtig verstanden?

Dann hab ich erstmal wieder was zum nachlesen. Danke schön.

22.05.2010 - 09:26 Uhr

Hallo zusammen,

ich möchte eine kleine Server, Client Anwendung bauen. Der Client schickt Abfragen für eine ODBC Datenbank, der Server führt sie aus und soll sie zurück an den Client schicken.

Momentan ist das ganze über einen TCP Listener geregelt der auf die Clienten wartet.

Mein Problem liegt darin das ich nicht weiß und auch nicht herausbekomme, wie man große Datenmengen am besten über das Netzwerk schickt.

Strings sind ja kein Problem


            NetworkStream clientStream = client.GetStream();
            byte[] message = Encoding.UTF8.GetBytes("Hello from the server.<EOF>");
            // Asynchronously send the message to the client.
            clientStream.BeginWrite(message, 0, message.Length,
                new AsyncCallback(sentCallback),
                null);

Aber was wenn ich auf meinem Server nun ca 1000 Datensätze abgefragt habe und die alle zum Client müssen?
Schicke ich die dann durch Semikolon getrennte Strings oder gibt es da eine bessere Möglichkeit? Ist es zb. möglich ganze Objekte (z.B. List<>) per TcpClient zu versenden?

Auch frage ich mich welcher Container (List, Array..etc.) am besten für solche großen Datenmengen geeignet wäre (zwecks suche und bearbeitung)

schonmal vielen dank für jeden hinweis

Sythus

06.05.2010 - 16:48 Uhr

Hallo und danke für eure Antwort.

Um ODBC komme ich leider nicht rum, da die Datenbank auf die ich zugreife eine alte Filemaker 6 Datenbank ist.

Ich schreibe die Software quasi aus der Not heraus da viele Sachen zu lösen sind die das alte DBMS nicht kann. Auch möchte ich von den täglichen CSV Exporten weg. Wie gut und schnell das am Ende ist muss ich erstmal schauen.

Ja die Clients laufen in einem Netzwerk. Die Idee mit dem zugreifen über ein Netzlaufwerk find ich gut. So erspar ich mir wenigstens ständig alles auf den Clients neu zu verteilen.

Der Webserver von Rainbow ist warscheinlich schon etwas überpowert für das was ich machen will.

Mir liegt halt viel daran das alles leicht zu erweitern ist und ich suche eine Struktur oder Architektur die ich für meine Projekte benutzen kann da ich mit meinen nicht so besonders zufrieden bin.

Ich freue mich über jede weitere Hilfe. Vielleicht hat janoch jemand einen guten Tip für mich 😃

Sythus

06.05.2010 - 09:45 Uhr

Hallo zusammen,

folgende Situation:
Ich möchte eine Serveranwendung schreiben die den Zugriff auf eine Datenbank per ODBC Zugriff mehrerer Clients verwaltet.
Die grundsätzliche Umsetzung eines Multithreadingservers und wie das mit der Verbindung übers Netzwerk funktioniert ist mir klar.

Was ich suche ist eine geeignete Architektur sowohl für den Server als auch für die Clients. Ich möchte das alles möglichst sauber programmieren und könnt deshalb ein paar Tips gebrauchen da ich mich mit dem meisten was ich schreibe nicht sonderlich wohlfühle. Wirklich zufrieden bin ich nie. Da das aber ein größeres Projekt wird möchte ich das so sauber wie möglich angehen.

Vielleicht gibt es ja schon eine Art Grundstruktur (man muss ja nicht immer alles neu erfinden), die gut zu verwalten, updatefähig und strukturiert ist.
Toll wäre es wenn der Server die Clients updaten könnte. Oder die Clients sich das Update vom Server holen könnten.

Wär für jede Idee, jeden Hinweis oder jede Hilfestellung dankbar.

Gruß
Sythus

28.04.2010 - 18:03 Uhr

Hallo zusammen 😃

Eigentlich ist XPath ja wirklich superschnell, doch heute bin ich auf ein kleines Problem gestoßen.

Ich schreibe grade an einem Programm das aus vorgegebenen Daten die ich als 2 XDocuments bekomme bestimmte Selektionen erstellt.

Es werden Daten aus beiden XDocuments benötigt.

Zuerst hole ich mir die passende Selektion per XPath aus XDocument A.
(Eben alle Datensätze die auf meine Selektion passen)

Danach muss ich zu jedem gefundenen Datensatz, den zugehörigen Datensatz aus XDocument B finden. Dies geschieht über eine bestimmte nummer bzw. id.

Finde ich in XDocument A nun 500 Datensätze, erfordert es 500 WEITERE XPathabfragen um alle zugehörigen Datensätze aus XDocument B zu finden.

Das dauert wirklich lange - dabei hatte ich gehofft so eine Selektion in Echtzeit (allein durch anklicken von Checkboxen) durchführen zu können.

Hat irgend jemand eine Idee wie man das ganze optimieren könnte? Oder ggf. anders anfassen?

Ich danke schonmal

viele Grüße
Sythus

03.04.2010 - 23:41 Uhr

Danke sehr 😃

Ging erst nich da SP1 installiert sein muss.

Gruß
Sythus

30.03.2010 - 19:05 Uhr

Hallo zusammen,

ich bin vor kurzem auf einen sehr interessanten Webcast über DSL (Domain-Specific Languages) - Tools gestoßen.
Nun wollte ich die DSL Tools gerne ausprobieren und bin verzweifelt auf der suche danach... Das einzige was ich finden konnte war für VS 2005, ich aber suche die DSL Tools für VS 2008.. Bin ich blöd oder nur blind?

Auch würde mich interessieren ob es irgendwo schon DSL Projekte gibt mit denen man arbeiten kann (man muss das rad ja nicht ständig neu erfinden)

Vielen dank schonmal und schöne Grüße

Sythus

Edit1: Danke fürs an die richtige Stelle setzen^^

09.02.2010 - 14:00 Uhr

Hallo ihr lieben,

ich habe ein Pluginsystem geschrieben das Plugins über Reflection lädt.

Nun würde ich das Programm gerne zentral von einem Server nutzen lassen. D.h. das alle die es benutzen auf einen Netzwerkpfad zugreifen.

\192.168.2.100\laufwerk\ordner1\pluginsystem\pluginsystem.exe

Bei dem Versuch sind mir nun allerdings zahllose SecurityPermissions entgegengeflogen.

EnvironmentPermission, FileDialogPermission, FileIOPermission

Kennt sich jemand in Sachen Berechtigungen übers Netzwerk aus und kann mir bei diesem Problem weiterhelfen?
Wäre echt toll.

Viele freundliche Grüßen,

Sythus

22.12.2009 - 12:23 Uhr

verwendetes Datenbanksystem: lokale Datenbankdatei mit Visual Studio C# Express

Hallo,

vorweg: ich habe mich schon Wund gesucht!!!

Ich erstelle eine Verbindung zu einer Datenbankdatei,

füge Werte hinzu und schließe Sie wieder.

Die Datenbank ist trotzdem immer leer.

Habe schon die Eigenschaft der Datenbank überprüft und das ganze so eingestellt das die nicht bei jedem Kompilieren neu erstellt wird..

Trotzdem - kurz nach dem Einfügen der Daten sind keine Daten vorhanden.

Hier meine Funktionen


        private SqlCeConnection SQL;
        private bool Connect()
        {
            string connectstr =
            "Data Source=" + Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + @"\NWind.sdf";
            connectstr = connectstr.Replace("file:\\", "");
            Console.WriteLine(connectstr);

            //Baut die Verbindung zu Datenbank auf
            SQL = new SqlCeConnection(connectstr);

            SQL.Open();

            if (SQL.State == ConnectionState.Open)
                return true;
            else
                return false;
        }

        private void AddID(string value)
        {
            if (SQL.State == ConnectionState.Open)
            {
                SqlCeCommand command = new SqlCeCommand("INSERT INTO MeineTabelle_IDs (id) VALUES ('" + value + "')", SQL);

                Console.WriteLine(command.CommandText);

                command.ExecuteNonQuery();
            }
            else
            {
                throw new Exception("Konnte den Wert nich hinzufügen da keine Verbindung zur Datenbank erstellt werden konnte");
            }
        }

        public void Close()
        {
            SQL.Close();
            Console.WriteLine("Close");
        }


Meckern tut er nicht - ich hoffe jemand kann mir weiterhelfen.

Vielen dank und schöne Grüße

16.12.2009 - 13:18 Uhr

Hallo 😃

ich sitze grade vor dem Problem das ich für einen HTTP Request gerne ein Proxy nutzen würde.

Wie man mit einem Socket über ein Proxy eine Internetseite auslesen kann habe ich herausgefunden.
Doch wie ist es möglich dem ganzen noch einen Cookiecontainer mitzugeben?

Wäre super wenn mir jemand helfen könnte.
Danke und schöne Grüße

Sythus

24.11.2009 - 13:26 Uhr

Habs 😄 das \r hat gefehlt!!
Danke an alle Helfer!!!

fertiger pattern:
"<td>Ort:</td>(\r|\n|\t| )<td>.</td>"

24.11.2009 - 13:09 Uhr

hi
und danke für eure Antworten...

Leider klappt das immernoch nicht.

\s wird als nicht erkannte escapesequenz angezeigt - gibt es anscheinend in .net nicht..
und mit .* in die Gruppe einbeziehen ist es leider auch nicht getan..

ich versteh nicht warum das nicht funktionieren will

24.11.2009 - 12:07 Uhr

Hallo 😃

ich bin nicht so erfahren in Regex und kriege kein ordentlich funktionierendes Pattern für mein Problem hin.
Habe auch schon den Regex on-the-fly tester aus dem Forum benutzt. Da funktioniert das ganze seltsamerweise auch...


<table>
	
		<tr>
			<td>PLZ:</td>
			<td>63928</td>
		</tr>
		<tr>
			<td>Ort:</td>

			<td>Eichenbühl</td>
		</tr>
		<tr>
			<td>Bundesland:</td>
			<td>Bayern</td>
		</tr>		
		<tr>
			<td>Land:</td>

			<td>DE</td>
		</tr>
		<tr><td>&nbsp;</td></tr>
.....


Ziel ist es nun, daraus die Orte auszulesen.. in diesem Fall Eichenbühl

mit dem Regex On-The-Fly tester habe ich folgendes Pattern erstellt

"<td>Ort:</td>(\n|\t)<td>.</td>"

leider findet er wenn ich es im code selber ausprobiere keinen treffer..


string page = ParsingFunctions.GetPage(url);
            Regex cityPattern = new Regex("<td>Ort:</td>(\n|\t)*<td>.*</td>");

            MatchCollection cityCollection = cityPattern.Matches(page);

            for (int i = 0; i < cityCollection.Count; i++)
            {
                Console.WriteLine(cityCollection[i].Value);
            }

Vielen dank für jede Hilfe

Viele Grüße
Sythus

22.11.2009 - 16:25 Uhr

Sorry,

hab da wirklich Mist geschrieben ^^ ist mir im nachhinein nun auch aufgefallen..

Danke - der Tipp mit den Cookies hat schon sehr geholfen!

lg

22.11.2009 - 15:31 Uhr

Hallo ihr Lieben 😃

ich suche Informationen in Sachen HTML Parsing...

Mich würde vorallem interessieren wie ich Daten von einer URL auslesen kann die eine bestimmte Session benötigen..

Fallbeispiel:

  • Im Browser

Gehe ich auf Link A (Session wird erstellt)
Gehe ich auf Link B -> Seite wird angezeigt auf Grund der Session

Gehe ich aber direkt auf Link B wird die Seite nicht angezeigt, da die Session nicht gesetzt wurde...

  • Im C# Programm

Ganz normaler HTTP Request auf LINK A, anschließend auf LINK B

Seite von LINK B wird nicht angezeigt, da die Session von Link A nicht gesetzt wurde..

Ich hoffe ihr versteht mein Problem..

Ich wollte in C# genau den gleichen weg gehen wie im Browser - die Ergebnisse sind aber unterschiedlich.

Jemand eine Idee?
Danke im vorraus...

06.10.2009 - 19:26 Uhr

Hallo vielen dank euch beiden - das mit dem shared Zugriff wusste ich irgendwie noch garnich.

Das mit der Datenbank seh ich aber als den professionelleren weg. Die aktualisierung der Datenbank sollte trotzdem ein Dienst übernehmen oder gibt es da bessere alternativen?

06.10.2009 - 17:30 Uhr

Hallo ihr lieben,

ich sitze vor einem kleinen Umsetzungsproblem...

Zur Erklärung:
Bei einem sehr veralteten Datenbankmanagementsystem werden täglich(manchmal auch 2 oder 3 tägig) manuell zu unterschiedlichen Zeiten verschiedene Datenbanken als CSV Dateien exportiert.

Für verschiedene Aufgaben habe ich ein kleines Tool geschrieben das beim starten von einem Clientarbeitsplatz sich aus den riesigen, unhandlichen und viel zu überfüllten Datenbankexportdateien das was es brauch herausholt.

Mit der Zeit brauchte dieses Tool immer mehr Daten und damit stieg auch die Anfangsladezeit enorm.

Auch hatte ich mit dem Problem zu kämpfen das wenn dieses Tool von 3 verschiedenen Rechnern gestartet wurde es zu Problemen beim Zugriff auf die Exportdateien kam oder kommen könnte/konnte...

Meine Idee war nun einen Windowsdienst zu schreiben der in regelmäßigen Intervallen die Exportdateien auf Änderungs bzw. Erstellungsdatum überprüft und bei neuem Erstellungsdatum die wichtigsten Daten herausliest und als XML Datei speichert.

Das würde die Ladezeit des Tools enorm verringern, da das Einlesen einer solchen XML Datei sehr schnell geht.

Aber auch hier habe ich mit dem mehrfachen zur gleichen Zeit zu kämpfen... genau dafür suche ich eine Lösung.

Würde es evtl. was bringen die Dateien auf die man zugreifen will temporär zu kopieren und dann die Kopie auszulesen? Oder gilt die Datei während des Kopiervorgangs auch als benutzt?

Auch würde mich interessieren ob eine neue Datenbank das Problem lösen könnte?
Denn wenn ich mir die Daten herauslese die ich brauche und in eine Datenbank speichere (und die Datenbank vielleicht auch zukünftig einfach nur aktualisiere als sie ganz neu zu erstellen) müsste ich doch mit mehreren Tools gleichzeitig auf die Daten zugreifen können, oder?

Mir fällt nichts optimales ein und ich würde das ganze gern so fehlerfrei wie möglich machen.

Ich bedanke mich für jede Idee

Gruß,
Sythus

29.09.2009 - 16:24 Uhr

Wenn ich die zahlen weglasse kommt die Meldung das er sich nicht mit dem Server verbinden kann. (klar für den hab ich ja keine Zugangsdaten)

Danke Tom das mit dem kompletten Pfad funktioniert. Hatte mir ettliche How to´s ergoogelt und bei keinem war der komplette Pfad angegeben.
Nächstes mal schau ich direkt hier nach einem How to und such nich nur den Fehler^^
Sorry

und vielen Dank

Gruß
Sythus

29.09.2009 - 15:21 Uhr

Habe nun herausgefunden das das Problem anscheinend an den zahlen der URL liegt..

ftp://1234MeineUrl.de

denn versuche ich nur

ftp://meineUrl.de

meckert er nicht.

Was kann ich da machen?

Gruß + Danke
Sythus

29.09.2009 - 14:46 Uhr

Hallo,

ich versuche grade einen Upload per FTP zu realisieren. Ich habe auch schon die Forumsuche bemüht und bin auch auf einige gestoßen die dieses Problem auch hatten.
Allerdings halfmir das alles nicht sonderlich weiter.

Der obige **Fehler **(Betreff) taucht bei folgendem Code auf:


        private bool LoadOnFtp(string filePath)
        {
            //Ein Request erstellen an den ftp Server
            FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://meineurl.de"));

            //Die Methode angeben um eine Datei hochzuladen
            request.Method = WebRequestMethods.Ftp.UploadFile;

            //Berechtigungsdetails setzen vom ftp Server durch Username und Passwort
            request.Credentials = new NetworkCredential("myUsername", "myPassword");

            request.UsePassive = true;
            request.UseBinary = true;
            request.KeepAlive = false;


            try
            {
                //Hier tritt der Fehler auf!!!!!
                //Versuch eine Verbindung zu erstellen und eine Antwort zu erhalten
                WebResponse response = request.GetResponse();
                MessageBox.Show("Response hat funktioniert");
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString());
            }

            //Neuer FileStream erstellen für die Datei
            FileStream fs = new FileStream(filePath, FileMode.Open);
            byte[] fileContents = new byte[fs.Length];
            fs.Read(fileContents, 0, Convert.ToInt32(fs.Length));
            fs.Flush();
            fs.Close();

            //Ein neuen Stream für den Request erstellen dem der FileStream mitgegeben wird.
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(fileContents, 0, fileContents.Length);
            requestStream.Close();

            //Verbindung abbschliessen
            request.Abort();           


            return true;
        }

Wäre nett wenn da jemand mal drüber gucken könnte.

Vielen dank,
gruß
Sythus

19.09.2009 - 11:45 Uhr

Hallo Flo,

na das probier ich gleich mal aus - danke^^ bin mal gespannt inwiefern das die performance beeinflusst - ich meld mich dann wieder

thx!

Nachtrag:

Ich kriege das leider nicht mit starts-with zum laufen, es spuckt zwar keine Fehlermeldung aus, aber finden tut er auch nichts


/Root/Dataset[starts-with(@stNumber=translate('s', 'abcdefghijklmnopqrstuvwxyzäöü', 'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ'), 's') and 1=1]

Die Performance nur mit "translate" war aber voll in Ordnung

Gruß
Sythus