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 Pedro_15
Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Ok, wollte es jetzt doch mal mit den Messages probieren und gleich auf Newton
umstellen.

Anleitung:
https://blogs.msdn.microsoft.com/carlosfigueira/2011/05/02/wcf-extensibility-message-formatters/

Leider bekomme ich das nicht in der web.config konfiguriert.

<extensions>
      <behaviorExtensions>
        <add name="newtonsoftJsonBehavior" type="Newtonsoft.Json.Extensions.NewtonsoftJsonBehaviorExtension, NewtonsoftJsonExtensions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      </behaviorExtensions>
    </extensions>
    <behaviors>
      <endpointBehaviors>
        <behavior name="endpointBehavior">
          <webHttp automaticFormatSelectionEnabled="true" helpEnabled="true" />
        </behavior>
        <behavior name="jsonRestEndpointBehavior">
          <webHttp/>
          <newtonsoftJsonBehavior/>
        </behavior>
      </endpointBehaviors>

Bekomme ich die Meldung:
Fehler
Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
Warnung Das Element 'behavior' hat ein ungültiges untergeordnetes Element 'newtonsoftJsonBehavior'. Erwartet wurde die Liste der möglichen Elemente: 'clientVia, callbackDebug, callbackTimeouts, clear, clientCredentials, transactedBatching, dataContractSerializer, dispatcherSynchronization, remove, synchronousReceive, webHttp, enableWebScript, endpointDiscovery, soapProcessing'.

Wenn ich meinen Code probiere ohne den Service auf den neuen endpointBehavior umzuleiten bekomme ich schon einen Fehler.
Fehler
HTTP/1.1 500 System.ServiceModel.ServiceActivationException

Hat jemand vielleicht schon mal das ganze in einer web.config eingebunden.

Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Danke, aber wenn ich das denn bloß verstehen würde mit den Messages...

Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Konstruktur na klar. Danke für den Tipp.


 [Serializable]
    public class SimpleDictionary : ISerializable
    {
        private Dictionary<string, object> _Dictionary;

        public SimpleDictionary()
        {
            _Dictionary = new Dictionary<string, object>();
        }
        public SimpleDictionary(SerializationInfo info, StreamingContext context)
        {
            _Dictionary = new Dictionary<string, object>();
             foreach (var entry in info)
            {
                _Dictionary.Add(entry.Name, entry.Value);
            }
        }
        public object this[string key]
        {
            get { return _Dictionary[key]; }
            set { _Dictionary[key] = value; }
        }
        public void Add(string key, object value)
        {
            _Dictionary.Add(key, value);
        }

        public Dictionary<string, object>.Enumerator GetEnumerator()
        {
            return _Dictionary.GetEnumerator();
        }

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            _Dictionary.ToList().ForEach(p => info.AddValue(p.Key.ToString(), p.Value));
        }
    }
.

Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Danke!

Mit dem Beispiel klappt die Rückgabe, aber bei der Übergabe ist die Variable die die KeyValuePairs aufnimmt leer.


POST /ICWebservices.svc/rest/GenericWebservice/v1.0/test HTTP/1.1
Host:localhost:51235
Content-Type: application/json; charset=utf-8
Content-Length: length
Accept:application/json

{
	"IdentId": "Test-IdentId",
	"Password": "Test-Password",
	"ProcessData": 
		{"Key1":"value1","Key2":"value2"}
}

Bringt das Ergebnis:


{
          "ResultList":{"key3":"value3","key4":"value4"}
}
Im TestCode füge ich aber die Eingangsparameter dazu, die Variable ist aber leer.


 SimpleDictionary<String, String> result = new SimpleDictionary<String, String>();
            result.Add("key3", "value3");
            result.Add("key4", "value4");

            foreach (KeyValuePair<String,String> keyvalue in webServiceRequestParams.ProcessData) {
                result.Add(keyvalue.Key, keyvalue.Value);
            }

            r.ResultList = result;

Muss ich für die hin serializierung noch was machen?

Und noch eine Frage:
Ich habe das mit der GetObjectData Methode auch schon mal probiert, aber mit overwrite. Das funktioniert nicht, wieso eigentlich nicht?


 public class KeyValuePairList<TKey, TValue> : Dictionary<TKey,TValue>
    {
        public override void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            this.ToList().ForEach(p => info.AddValue(p.Key.ToString(), p.Value));
        }
    }

Danke!

Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Zitat
Wie gesagt; dann wirste wohl nen Custom Formatter brauchen (vermutlich).
Die Default-Darstellung des Serializers ist übrigens nicht falsch, sondern inhaltlich und in Sachen Json absolut korrekt.
Die simple Darstellung formatiert es nur als Json-Objekt.

Schade, ich denke die Einstellungsänderung müsste doch eigentlich leicht sein.
Ich weiss, das die Json Darstellung korrekt ist, aber die Kunden würden gerne die andere Darstellung übermitteln und zurück bekommen.

Naja vielleicht finde ich ja noch die Möglichkeit die Einstellung


DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true };
zu ändern.

Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Ich soll also Rest und SOAP Webservice mit ASP.Net Core WebApi erstellen.

Da habe ich nicht das Seralisierungsproblem?

Ich brauche in meinem Fall einen Service der mittels REST oder SOAP angesprochen werden kann.
Diesem Service werden Listen von KeyValuePairs übergeben und als Ergebnis werden wieder Listen von KeyValuePairs zurückgegeben (nach einer Verarbeitung natürlich :-)).

Mit WCF funktioniert alles prima nur eben leider nicht die richtige Darstellung von Dictionary (KeyValuePairs) sowohl bei der Übergabe und auch bei der Rückgabe.

Da die Verarbeitung gekapselt ist, könnte ich, hoffe ich zumindest, auch einen neue ASP.Net Core Api verwenden. Ich bräuchte nur eine KeyValuePair Übergabe und Rückgabe.

Könnt Ihr sagen, ob das funktioniert mit der Serialisierung?

{"key1":"value1","key2":"value2"} -> Dictionary<String,String>

Vielen Dank für die Hilfe!

Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Kannst du mir vielleicht sagen wo dieser Code rein soll. Das ist doch genau mein Problem.



    DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true };

    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(MyObject), settings);

Wie gesagt, ich benutze ein WCF Service und die Serialisierung funktioniert intern und automatisch.

Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Vielleicht stehe ich ja auf dem Schlauch.

Zu lesen ist, auch in dem Artikle von Abt, das "JSON (based on the DataContractJsonSerializer) ".

Ich möchte diesen Serializer nicht ersetzen, sondern nur eine Konfiguaration(Setting) ändern.

Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Sorry, verstehe die Antwort nicht.

Wo soll den der Code hin?

Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Danke, aber Google habe ich auch. Sorry!
Aber ich habe jetzt schon zwei Tage im Internet zu gebracht.

Es kann sein, dass das zu einer Lösung führt, aber ich habe es so nicht hinbekommen.
Ich möchte auch nicht den ganzen Standard umhauen, es sollen immer noch alle anderen serialisierungen funktionieren.

Die Funktion (ab .net 4.5) ist relativ neu und der Beitrag schon älter. Ich kann mir nicht vorstellen, dass es so aufwendig ist, diesen Parameter zu setzen.

Aber danke für die Hilfe!

Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Die Klasse ist mir bekannt. Ich hatte ja geschrieben:

Zitat
Im Internet habe ich gefunden, das man ein Parameter UseSimpleDictionaryFormat in DataContractJsonSerializerSettings setzen kann.
Leider finde ich keinen Weg den Parameter zu setzen.

Ich habe ja kein Code wo ich ansetzen kann, denn die Serialisierung macht ja der WCF Service intern für mich.

Genau das ist die Frage, wo kann ich das für den internen DataContractJsonSerializer setzen?

Danke!

Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Hallo,

viellecht war es ein wenig kurz das Beispiel:

es geht um den Type Dictionary<string,string>

er wird im Standard WCF so serializiert.

[{
        "Key":"Key1",
        "Value":"Value1"
    },{
        "Key":"Key2",
        "Value":"Value2"
    }]

er soll aber
{
        "Key1":"Value1",
        "Key2":"Value2"
    }
so aussehen.

Dafür soll man den Parameter UseSimpleDictionaryFormat auf true setzen.

Die Frage ist nur wo.

Gruss!

Pedro

Thema: WCF Service JSON DataContractJsonSerializer - Dictionary
Am im Forum: Web-Technologien

Hallo,

habe ein Problem mit JSON in Verbindung mit Dictionary Objekt.

Der WCF Service serialisiert das Dictionary Objekt:


[{
		"Key":"Zeichenfolgeninhalt",
		"Value":"Zeichenfolgeninhalt"
	}]
Ich brauche aber {Key-Wert:Value-Wert} .
Im Internet habe ich gefunden, das man ein Parameter UseSimpleDictionaryFormat in DataContractJsonSerializerSettings setzen kann.
Leider finde ich keinen Weg den Parameter zu setzen.

Ich habe ja kein Code wo ich ansetzen kann, denn die Serialisierung macht ja der WCF Service intern für mich.

Kennt jemand das Problem und kann mir helfen?

Danke!

Pedro

Thema: Verweise auf .net Dll bringt Versionsfehler - Wie mache ich das Versionsunabhängig?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich habe ein grosses Problem. Ich verwende in meinem .net csharp Projekt (A) eine .net csharp dll aus einem anderen Projekt (B) von mir.
Ich habe sie über den Verweis eingebunden.

Und die Applikation erstellt. Alles gut, bis dahin.

Jetzt ändere ich was in meinem DLL Projekt (B) ohne irgendwelche Aufrufparameter von Methoden zu ändern. Wenn ich jetzt nur die dll tausche in meiner Applikation aus Projekt (A), ohne die Applikation neu zu erstellen, kommt ein Fehler beim Aufruf, da die Version nicht mit der kompelierten Version übereinstimmt.

Gibt es eine Lösung, das ich die DLL Versionsunabhängig einbinden kann?

Es gibt sehr viele Version der DLL und daher müsste ich z.b bei Änderungen an Projekt A mit jeder DLL Version (B) kompelieren und damit eine Version von A erzeugen. Das ist sehr unschön.

Wie gesagt, es ändert sich nichts an den öffentlichen Aufrufen und den Parametern in der DLL

Danke!

Pedro

Thema: WCF Webservice erstellen mit dynamischer Struktur
Am im Forum: Netzwerktechnologien

Zitat
Wenn das mit der Service-Implementierung kein Problem ist, so verstehe ich nicht warum das (automatische) Generieren der WSDL ein Problem sein soll?

Ich denke nicht das es ein Problem ist, sonder ich muss mich erstmal in WCF einarbeiten, dann wird es schon funktionieren, wenn du es sagst.

Danke!

Pedro

Thema: WCF Webservice erstellen mit dynamischer Struktur
Am im Forum: Netzwerktechnologien

Danke, hast du zum letzten Punkt einige Informationsseiten oder Bücher die du empfehlen kannst.

Zitat
Wer bzw. woher soll die Implementierung von Summe und Produkt kommen?
Es gibt eine Interface Programmierung die immer genauso vom Webservice aufgerufen wird. Was passiert steht in der Datenbank und wird dynamisch von der internen Webserviceprogrammierung aufgerufen. Das ist nicht das Problem.

Ich muss nur irgenwie hinbekommen, dass der Aufrufer weiss welche Methoden und Parameter intern aufgerufen werden können.

Danke

Thema: WCF Webservice erstellen mit dynamischer Struktur
Am im Forum: Netzwerktechnologien

Ich habe ein Entwicklungsframework mit dem man Formulare und Funktionen erstellt werden. Der Webservice soll Formulare bedienen und Feldinhalte eintragen und Ergebnisse zurückgeben.

Im Framework wird also ein neuer Webservice definiert, welches Formular mit welchen Feldern und welchen Funktionen aufgerufen werden.

Zur Zeit gibt schon einen .Net Webservice der nur aus zwei Felder besteht.
1. Name des Webservice (String)
2. Prozessdaten (XML Type) - die Speziellen Daten des Webservice (Feld1, Feld2)

So funktioniert es, aber Nachteil ist, dass der User nicht weiss welche Webservice überhaupt angeboten werden und auch nicht welche Werte erwartet werden.
Und es kann aus dem WSDL kein Client automatisch erstellt werden, was die Kunden sehr stört.
Also soll es jetzt anders umgesetzt werden.

Man müsste also das WSDL irgendwie automatisch zusammenbauen oder er müsste es aus der Datenbank ziehen.

Aber keine Ahnung wie das gehen soll.

Thema: WCF Webservice erstellen mit dynamischer Struktur
Am im Forum: Netzwerktechnologien

Hallo,

ich würde gerne einen neuen Webservice programmieren der dynamisch aus einer Datenbank seine Definition bezieht.

Zum Beispiel (nur einfaches Beispiel):
Tabelle webservice
ID; Name
1; Summe
2; Produkt

Tabelle webservice_param
ID;Feldname;Datentyp
1;Feld1;int
1;Feld2;int
1;Feld3;int
2;Feld1;float

Das wsdl muss also dynamisch erstellt werden.

Geht das?

Danke für die Hilfe!

Pedro

Thema: ASMX Webservice: Loggen des Aufrufers (Username und Rechnername)
Am im Forum: Netzwerktechnologien

Hallo Ihr,

ich habe ein .Net Webservice in CSharp geschrieben, wie bekomme ich den Aufrufer heraus.

Benötigt werden folgende Information.
1. Username des Aufrufers
2. Rechnername des Aufrufers

Diese Informationen sollen mit der EnterpriseLibrary.Logging ausgegeben werden.

Vielen Dank!

Pedro

Thema: Drucker-Eigenschaften und Drucker-Icon der installieren Drucker abfragen
Am im Forum: Rund um die Programmierung

Hallo,

ich möchte gerne den Druckerdialog aus Office 2010 nachbauen. Dafür bräuchte ich die Installierten Drucker (habe ich schon mit PrinterSettings.InstalledPrinters), deren Eigenschaften und das Drucker-Icon.

Ich bräuchte also eine Möglichkeiten die Eigenschaften und das Icon, was unter Windows angezeigt wird, abzurufen.

Hat jemand eine Idee!

Pedro

Thema: In App.Config Liste von Werten für einen Parameter
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke für die Hilfe.

Habe jetzt die Definition über das AppSettings Form im VisualStudio gemacht.

Type: System.Collection.Specialized.StringCollection

Ergebnis:


<applicationSetting>
  <Anwendung.Properties.Settings>
    <setting name="FolderFilter" serializeAs="Xml">
    <value>
      <ArrayOfString xmlns:xsi... xmlns:xsd... >
         <string>.svn</string>
         <string>temp</string>
      </ArrayOfString>
    </value>
    <setting>
  </Anwendung.Properties.Settings>
</applicationSetting>

Jetzt muss ich es nur noch in eine Liste wieder auslesen....


foreach (String value in Properties.Settings.Default.FolderFilter)
{
   filterList.Add(value);
}

Danke für die Hilfe!

Pedro

Thema: In App.Config Liste von Werten für einen Parameter
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

könnt Ihr mir bitte bei einem kleinen Problem helfen?

Ich möchte in der Config Datei eine Liste von Werten für einen Paramter speichern.

Die Werteliste kann jetzt 0-n Einträge haben. Wie kann ich das in dem Configfile definieren und dann wieder in eine Liste auslesen?

so geht es nicht ....


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="Werteliste" value="Wert1" />
    <add key="Werteliste" value="Wert2" />
  </appSettings>
</configuration>

und so auch nicht... oder?

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="Werteliste" >
         <value>Wert1</value>
         <value>Wert2</value>
    </add>
  </appSettings>
</configuration>

Wie lese ich das ganze dann wieder aus?


// ????????????????????
foreach (string value in ConfigurationManager.AppSettings[key])
{
      Console.WriteLine("Value: {1}", value);
}

Danke für die Hilfe.

Pedro

Thema: Riched20.dll Kann nicht geladen werden (32/64bit Problem)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Danke für den Hinweis, der mir leider nicht weiterhilft.

Ich möchte doch nur ein funktionierendes RTF Control. Leider ist das nicht mit dem Standard möglich.

Vielleicht hat ja jemand noch eine Lösung.

Pedro

Thema: Riched20.dll Kann nicht geladen werden (32/64bit Problem)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Wie DickesB schon richtig geschrieben hat, liegt es an der schwäche der Standard Version der riched20.dll die in Windows system32 Ordner liegt (Version 3.1).

Wenn Office installiert wurde, gibt es noch eine Passende riched20.dll im "Common Files\microsoft shared\officexx" (z.B. bei Office2010 Version 6.0).

Ok ich kann auch die Datei laden, aber wie bekomme ich raus in welchem Ordner "officexx" die Datei liegt, denn bei jeder Office Version gibt es einen anderen Ordner.

Ich kann natürlich von Office14 bis Office10 alle Ordner durch gehen und schauen,
aber ist das schön?

Des Weiteren gibt es das Problem, wenn kein Office installiert ist, dann gibt es keinen Ordner mit einer neueren dll.

So habe ich mir gedacht, die Datei einfach mitzulieferen. Leider hat sich gerade ergeben, dass bei Office 2007 Installationen die mitgelieferte Datei von Office 2010 nicht funktioniert.

Also alles keine gute Lösung!

Hat jemand eine Idee?

Pedro

Thema: Geladene DLL - Version ermitteln
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Leider gibt mir das nicht das was ich möchte.
Ich bekomme
asm = {System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}

Mich intressiert aber die Version von riched20.dll.


Assembly asm = typeof(RichTextBox).Assembly;
            Version version = asm.GetName().Version; 

Kann bitte jemand Licht machen.

Pedro

Thema: Riched20.dll Kann nicht geladen werden (32/64bit Problem)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ja, das funktioniert auf jedenfall, aber schöner wäre es, wenn ich die richtige Version nachladen könnte.

Nur leider bekomme ich es nicht hin.


Assembly[] appAssemblies = AppDomain.CurrentDomain.GetAssemblies();

            for (int i = 0; i < appAssemblies.Length; i++)
                Console.WriteLine(
                    "{0}: {1}\n", i + 1, appAssemblies[i].FullName);

Komisch ist auch das nach dem Laden keine Assembly riched20 geladen ist.

Ich verstehe es irgendwie nicht.

Pedro

Thema: Riched20.dll Kann nicht geladen werden (32/64bit Problem)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

ich habe noch ein Problem damit.

Ich habe jetzt den Code:


if (!Is64BitExecution)
                {
                    string file = Application.StartupPath + "\\RICHED20.DLL";
                    
                    if (System.IO.File.Exists(file))
                    {

                        LoadLibrary(file);
                        version6 = true;
                        
                    }
                    
                }
                else
                {
                    string file = Application.StartupPath + "\\64Bit\\RICHED20.DLL";

                    if (System.IO.File.Exists(file))
                    {

                        LoadLibrary(file);
                        version6 = true;

                    }
                }

Das Programm läd die Dateien richtig (laut Debugger), aber bei dem 64Bit System kommt wieder die Fehlermeldung.

Kann es sein, dass das Programm die Datei die im Root Ordner liegt schon geladen hat und diese nimmt.

Was passiert, wenn schon die falsche DLL geladen wurde. Kann ich die DLL auch wieder entladen und die richtige DLL laden?

Ich hoffe, ich habe mich nicht zu unklar ausgedrückt.

Pedro

Thema: Geladene DLL - Version ermitteln
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich habe mal eine kurze Frage.

Wie kann ich die Version einer geladenen DLL ermitteln.
Es geht darum nicht ein File-Namen anzugeben, sondern es soll die
geladen DLL ermittelt werden. (Im aktuellen Fall riched20.dll)

Danke!

Pedro

Thema: Riched20.dll Kann nicht geladen werden (32/64bit Problem)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ich liefer die riched20.dll mit, denn im Windows Verzeichnis ist ein alte dll mit der einige Dinge nicht gehen (Tabellen werden nicht richtig dargestellt).

Deswegen lade ich die DLL zur Laufzeit.

LoadLibrary(file);


[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        internal extern static IntPtr LoadLibrary(string libname);


Wie kann ich das am besten handeln?

Und wie bekomme ich raus, welche Vesion der DLL geladen ist?
Kann ich die Verionsnummer auslesen?
Danke!

Pedro

Thema: Riched20.dll Kann nicht geladen werden (32/64bit Problem)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

wir haben den Fehler gefunden.

Es liegt doch an der riched20.dlll die es in zwei Versionen gibt eine für 32bit und eine für 64bit.

Wie kann ich es jetzt Handeln das die Richtige Version geladen wird?

Dank!

Pedro