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 SkySurfer
Thema: MS SyncFramework 2.1 und SQL Server 2008 Change Tracking
Am im Forum: Datentechnologien

Hallo,

ich bin gerade dabei ein Projekt von MS Sync Framework 1 auf das aktuelle 2.1 umzustellen. Dabei möchte ich auch das ganze Synctabellen, Trigger und Stored Procedure Zeug los werden und das Change Tracking das SQL Servers 2008 nutzen. Von dem ich mir mehr Übersicht in der Datenbank (weil nicht zu jeder Tabelle noch extra Tabellen angelegt werden müssen) und mehr Performance (weil nicht mehr über Trigger und Stored Procedures behandelt) erhoffe.

In der Version 2.0 des Sync Frameworks musste man hierfür eine DbServerSyncProvider nehmen und die SQL Statements auf das Change Tracking des SQL Servers anpassen. Das Filtern erfolgte dann in abgeleiteten SyncAdaptern in denen man ebenfalls die SQL Statements anpassen musste.

Beim lesen der Hilfe für die Version 2.1 habe ich gesehen, dass in Verbindung mit dem SqlSyncProvider die Möglichkeit gibt Zeilen und Spaltenfilter schöner zu definieren als durch das anpassen des SyncAdapters. Was ich aber aus der Hilfe nicht eindeutig rauslesen konnte, war ob der SqlSyncProvider nun das ChangeTracking des SQL Servers unterstützt. Dies war in der Version 2.0 noch nicht der Fall.

Hat hier vielleicht schon jemand Erfahung mit der Version 2.1?

Gruß SkySurfer

Thema: UserControl mit GridView: SelectedPersistedDataKey nicht rechtzeitig aktualisiert?
Am im Forum: Web-Technologien

Hi,
ich habe ein UserControl erstellt auf dem ein GridView und eine ObjectDataSource
liegen. Diese bekommen über eine Eigenschaften die Information welche Daten angezeigt werden sollen. Das UserControl bietet eine Update Methode welche das Query ausführt und anschließen ein Changed Event des UserControls auslößt.


   public void Update()
   {
      ObjectDataSource1.SelectParameters["Param1"].DefaultValue = _param1.ToString();
      ObjectDataSource1.SelectParameters["Param2"].DefaultValue = _param2.ToString();
      GridView1.DataBind();
      GridView1.SelectedIndex = 0;
      SelectedIndexChanged(this, EventArgs.Empty);
   }

Die Daten werden in das GridView geladen und der erste Datensatz wird selektiert. Die DataKeyNames Eigenschaft des GridViews ist auf den Primärschlüssel des Datensatzes gesetzt und wird über eine Eigenschaft direkt wieder an die Seite zurück geben.


   public int SelectedData
   {
      get
      {
         int data = 0;
         if (GridView1.SelectedPersistedDataKey != null)
         {
            data = (int) GridView1.SelectedPersistedDataKey.Value;
         }
         return data;
      }
   }

Die Parameter für dieses UserControl werden über eine andere GridView ausgewählt und an das UserControl in der SelectedIndexChanged Methode übertragen.

Das ganze funktioniert beim ersten Pageload (IsPostBack = false)
und wenn ich die Daten im GridView des UserControls per Maus selektiere. Dann wird das SelectedChangedEvent des UserControls gefeuert und die Seite bekommt über die SelectedData Eigenschaft den richtigen Wert geliefert.

Wenn ich jedoch einen anderen Parameter für das UserControl in dem GridView der Seite wähle wird zwar das GridView im UserControl aktualisiert und zeigt die richtige Datan an aber die SelectedData Eigenschaft liefert noch den zuletzt selektierten Wert zurück und noch nicht den neuen, welcher jedoch bereits im UserControl als selektiert dargestellt wird.

Woran kann das liegen?

Gruß SkySurfer

Thema: Webservice - Fehler SQL-Connect
Am im Forum: Web-Technologien

Nur Methoden die von deinem WebService bereit gestellt werden sollen
benötigen das WebMethod Attribut

Erster Treffer bei Google

Thema: Webservice - Fehler SQL-Connect
Am im Forum: Web-Technologien

Wirf die Dateien in das gleiche Verzeichnis wie deine DLL hier sollte auch gesucht werden wenn Sie im GAC nicht gefunden werden.

Thema: Webservice - Fehler SQL-Connect
Am im Forum: Web-Technologien

Hast du alle zugehörigen Dateien des MySQL Connectors auf den Server deployed ?

Thema: Webservice - Fehler SQL-Connect
Am im Forum: Web-Technologien

Fehlt vielleicht der Verweis auf die MySQL Connector DLL?

Thema: Webservice - Fehler SQL-Connect
Am im Forum: Web-Technologien

Also den Connector bekommst du hier : MySQL ADO.NET Connector

Ein ganz brauchbares Beispiel gibt es hier : MySQL .NET With C#

Thema: Webservice - Fehler SQL-Connect
Am im Forum: Web-Technologien

Hi,

kann denn eine Verbindung mit dem Server hergestellt werden?
Mal ein Ping versucht bzw. eine Verbindung mit einem anderen Client
(HeidiSql, Database Brower, etc) versucht?

Und wo ich mir das grad nochmal durchlese:
Bist du dir sicher, dass man mit der SqlConnection sich mit einem MySQL Server
verbinden kann?

Ich habe dafür immer den ADO.NET Adapter von MySQL verwendet. Damit gab es nie Probleme.

Gruß SkySurfer

Thema: Custom Membership Provider + FormsAuthentication
Am im Forum: Web-Technologien

Ja im Browser sind sie erlaubt. Ich hab es auch schon mit Autodetect versucht und er nutzt Cookies.

Ich hab auch mal etwas rum gespielt und die Cookies in der Authenticate Methode selbst gesetzt:


   protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
   {
      bool auth = Membership.ValidateUser(Login1.UserName, Login1.Password);
      if(auth)
      {
         e.Authenticated = true;
         FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,Login1.UserName, DateTime.Now, DateTime.Now.AddMinutes(30),Login1.RememberMeSet,"", FormsAuthentication.FormsCookiePath);
         
         string encTicket = FormsAuthentication.Encrypt(ticket);
         Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
      }
   }

Ergebnis war, dass er nach der Weiterleitung das Cookie findet und Abmelden anzeigt aber sobald ich auf eine andere Seite navigiert habe wurde wieder Anmelden anzeigt.

Hatte erst gedacht es wäre ein Problem mit der Gültigkeitsdauer und habe das Cookie auf 30 Min gesetzt, dass hatte aber keine Auswirkung.

Thema: Custom Membership Provider + FormsAuthentication
Am im Forum: Web-Technologien

Wenn ich den MSDN Eintrag richtig verstanden habe sollte das vom Login Steuerelement gemacht werden, wenn ich einen MembershipProvider angebe.

Aber ich hab es auch mit


   protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
   {
      e.Authenticated = Membership.ValidateUser(Login1.UserName, Login1.Password);
   }

versucht Benutzer wird zwar angefragt und bestätigt, aber danach nicht wieder erkannt.

Thema: Custom Membership Provider + FormsAuthentication
Am im Forum: Web-Technologien

Hab ich bereits überprüft:
Die ValidateUser Metode wird mit den richtigen Daten aufgerufen und liefert auch True zurück.

Thema: Custom Membership Provider + FormsAuthentication
Am im Forum: Web-Technologien

Hi,

ich habe einen eigenen MembershipProvider erstellt um Benutzer gegen
meine Datenbank authentifizieren zu können.

Ich habe ihn bis jetzt als Quelle für die BasicAuth meines WebServices verwendet.

Nun möchte ich ihn auch für die FormsAuthentication verwenden, hier gibts aber noch Probleme.

Ich hab eine LoginPage mit dem LoginControl erstellt, in der Membership Property meinen Membership Provider
gesetzt und in den Master ein LoginStatus gepackt um zu sehen ob es geklappt hat.


<membership defaultProvider="Membership">
  <providers>
    <add name="Membership"    type="Security.MembershipProvider,    
        SecurityProvider" />
  </providers>
</membership>
<roleManager enabled="true" cacheRolesInCookie="true"  
  defaultProvider="Roles">
  <providers>
    <add name="Roles" type="Security.RolesProvider, SecurityProvider" />
  </providers>
</roleManager>
<authentication mode="Forms">
  <forms cookieless="UseCookies" domain="localhost" loginUrl="login.aspx" name=".ASPWEB" path="/" protection="All" 
      requireSSL="false" slidingExpiration="true"  timeout="30"/>
</authentication>

Wenn ich mich nun über die Login Seite anmelden will werden Benutzername und Passwort über meinen MembershipProvider geprüft und dieser liefert TRUE zurück.

Ich werde weitergeleitet auf die Default.aspx aber der Loginstatus zeigt noch anmelden.

Versuche haben gezeigt, dass auch Context.User.Identity.IsAuthenticated False zurück liefert und der Context.User.Name == "" ist.

Hat jemand eine Idee woran das liegen kann?
Hab ich irgendwo etwas vergessen?

Besten Dank.
Gruß, SkySurfer

Thema: Problem beim DllImport einer unmanaged DLL: Attempted to read or write protected memory
Am im Forum: Rund um die Programmierung

Habe zur DLL leider nur die Lib.
Also muss ich mir wohl die Arbeit machen und einen Wrapper in mannaged C++ schreiben...

Hatte gehofft ich könnte mir das sparen.

Danke

Thema: Problem beim DllImport einer unmanaged DLL: Attempted to read or write protected memory
Am im Forum: Rund um die Programmierung

Hi,

ich versuche eine unmanaged C++ DLL einzubinden und hänge gerade etwas..

Habe von der DLL die Header Datei in der ist die Funktion die ich brauche auch definiert:


BOOL ParserInit(char *);

leider nicht als extern C noch mit _declspec (dllimport) was die sache etwas verkompliziert.

habe mir mit bindump den EntryPoint rausgesucht und dann die Funktion in meinen Code eingebunden :


      [DllImport("MdtParser.dll", EntryPoint = "?ParserInit@@YAHPAD@Z", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, ExactSpelling = true)]
      private static extern bool ParserInit(StringBuilder outBuffer);

Wenn ich diese dann aufrufe bekomme ich folgende Meldung :
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Habe auch schon CallingConvention = CallingConvention.Cdecl probiert und die gleiche Meldung bekommen.

Hat noch jemand eine Idee was man noch machen kann?

Gruß SkySurfer

Thema: Aussehen der Smart Devices Button ändern
Am im Forum: GUI: Windows-Forms

Hi,

soweit ich weiß ist das CF recht eingeschränkt was die Gestalltung
der grafischen Komponenten angeht, das viele der Funktionen welche
die WM API bereitstellt nicht implementiert sind.

Du kannst also entweder den Button ableiten und die fehlenen Funktionen
nach implementieren oder dir direkt einen eingen Wrapper um die WM API
machen. Wir haben bei unseren Anwendungen die letztere Methode gewählt.

Gruß SkySurfer

Thema: SerialPort einzelnes Zeichen sicher senden?
Am im Forum: Rund um die Programmierung

Generell gebe ich dir recht in echten Anwedungen sollte man mit Events arbeiten..
das oben war auch nur ein Beispiel zum nachvollziehen.

Das Problem ist durch Events aber nicht gelößt.. da es kein Event gibt das einem meldet, dass etwas gesendet wurde und sich das Senden damit auch nicht forcieren lässt. Und das Hauptproblem nicht ist, dass ich ein Timeout beim empfangen bekommen,
sondern dass das Zeichen erst garnicht rausgesendet wird. Problem scheint bei XP zu sein, dass erst ab mehr als einem Zeichen im Puffer gesendet wird.

Habe mir jetzt mit dem Hack beholfen die WriteBufferSize auf 1 zu setzen, beim Öffnen abzuprüfen, ob die Verbindung offen ist und wenn ja die Exception zu unterdrücken. Und anstatt

serialConnection.Write("V"); 
verwende ich

serialPort.Write(new char[] { 'V' },0 ,1);
in dieser Kombination läuft das Übertragen von einzelnen Zeichen sowohl unter XP als auch auf Win7.

Gruß SkySurfer

Thema: SerialPort einzelnes Zeichen sicher senden?
Am im Forum: Rund um die Programmierung

Hi,

ich versuche gerade mit .net 2.0 und SerialPort eine serielle Kommunikation aufzubauen und bin dabei unter XP auf folgendes Problem gestoßen, welches auf meinem Win7 Rechner erst garnicht auftritt:


serialPort.Write("V");
char c = (char)serialPort.ReadChar(); // read echo
wirft ReadChar ein Timeout weil Write das Zeichen wohl noch nicht gesendet hat.

Bisher hab ich versucht dazwischen ein

serialPort.BaseSteam.Flush();
oder ein

Thread.Sleep(time);
aufzurufen beides ohne Erfolg. Der Writebuffer wird nicht übertragen.

Dabei den versuchen habe ich noch ein sehr Merkwürdige verhalten entdeckt:

wenn man

serialPort.WriteBufferSize = 1; 
setzt bekommt man beim Open() eine Exception, dass der Port nicht geöffnet werden kann. serialPort.IsOpen meldet aber true. Und man kann danach auch senden und empfangen. Und da der Puffer nach einem Zeichen voll ist wird er auch übertragen. Seitzt man die WriteBufferSize = 2 tritt beim Open() keine Exception auf jedoch wird dann auch das einzelne Zeichen nicht mehr gesendet.

Das lustige an der Geschiche: MSDN sagt zu WriteBufferSize Werte unter 2048 werden ignoriert...

Möchte also nicht unbedingt die Exception wegfangen und drauf hoffen das dieser "Fehler" auf jedem System funktioniert.

Gibt es eine Möglichkeit ein Zeichen sicher abzusenden, welche sowohl unter XP als auch Win7 funktioniert?

Gruß SkySurfer

Thema: ExtendedFileDialog von codeproject feuert unter Win7 x64 keine Events
Am im Forum: GUI: Windows-Forms

Hi,

ich habe das ExtendedFileDialog von codeproject verwendet und hab unter Win7 x64 das Problem, dass die Events nicht feuern. So wie es aussieht geht beim Hook der die WMs
verarbeitet etwas schief. Hat das vielleicht schon jemand gelößt?

Gruß
SkySurfer

Thema: Ringförmigen Farbverlauf zeichnen (DrawArc und PathGradientBrush)?
Am im Forum: Grafik und Sound

Also mein jetziger Ansatz wäre es einen Brush abzuleiten und den Farbverlauf selbst zu berechnen als ähnlich wie man dann dann bei 3.0 machen würde über kleine Integrationsschrittweite ..

Thema: Ringförmigen Farbverlauf zeichnen (DrawArc und PathGradientBrush)?
Am im Forum: Grafik und Sound

naja also im prinzip soll der verlauf dem kurvenpfad folgen..

das wie würde mich jetzt auch interessieren ;)

Thema: Ringförmigen Farbverlauf zeichnen (DrawArc und PathGradientBrush)?
Am im Forum: Grafik und Sound

Hi,

ich versuch gerade eine Prozentanzeige in Form eines Rings zu machen...
einfarbig soweit auch kein Problem.


g.DrawArc(_pen, _drawingRect, _startAngle, _percentAngle);

Jedoch hätte ich den Ring gerne mit einem Gradientenfarbverlauf versehen.
Also irgendwie in der Art:


GraphicsPath path = new GraphicsPath();
path.AddArc(_drawingRect, _startAngle, _percentAngle);
path.FillMode = FillMode.Winding;

PathGradientBrush brush = new PathGradientBrush(path);
brush.WrapMode = WrapMode.Clamp;
ColorBlend cb = new ColorBlend();
cb.Colors = new Color[] { Color.Blue, Color.Aquamarine };
cb.Positions = new float[] { 0.0f, 1.0f };
brush.InterpolationColors = cb;
_pen = new Pen(brush, _thicknes);

Jedoch hätte ich gern das der Farbverlauf dem Arc folgt und nicht zur Mitte hin verläuft.
Gibt es da eine Möglichkeit?

Besten Dank im voraus

Thema: Aktivierungs Key Generator schneller und effektiver machen
Am im Forum: Rund um die Programmierung

Das erinnert mich an die Aktivierung eines nicht näher genannten Softwareriesen dessen Aktivierung jeweils eine Quersumme von 7 ergeben musst ;)

Ist ja Klar das es ewig dauert... bis du zufällig eine Zahl zusammengebaut die deinen Anforderungen entspricht.

1097 -794 = 303 Zielbereich

5 * 43 = 215
5 * 290 = 1450

1450 - 215 = 1235 Quellbereich

215 / 1235 = 0.174089069 Wahrscheinlichkeit eine passende Zahl pro Versuch zu finden.

Vielleicht nicht ganz Ideal deine Methode...

Thema: XPath Knotentest auf dessen Inhalt?
Am im Forum: Datentechnologien

Hi,

ich hab eine XML Datei in folgender Struktur


<a>
  <b>
    <c>
      <d>1</d>
      ...
    </c>
    <c>
      <d>2</d>
    </c>
  </b>
</a>

da d keine Attribute hat muss ich auf den Knoteninhalt testen.

Mein Idee war etwas in der Richtung:

//child::c[d = "1"]

liefert jedoch leider kein Ergebnis. Hat jemand eine Idee wie ich das lösen könnte?

Gruß SkySurfer

Thema: Drucker - Zählerstand am lokalen Drucker auslesen ?
Am im Forum: Rund um die Programmierung

Prinzipiell dürfe das schon möglich sein.. ich denke aber das der Zählerstand eine Sache des Herstellers ist und du schauen musst, wie du über dessen Treiber API die Werte bekommst.

Also ohne genauere Info über die Geräte werden wir dir nicht viel weiter helfen können.

Gruß SkySurfer

Thema: SOAP Datentransfer bricht bei großen Übertragungen ab
Am im Forum: Netzwerktechnologien

WSE hat ab Version 2.0 ein integrierten Schutz vor DoS Attacken..
Blöd wenn er den eigenen Datentransfer auch als DoS erkennt aber die Exception nicht nach außen weiter gibt...

mit dem app.config Eintrag


<maxMessageLength value="1024" /> 

lässt sich die zugelassene Datenmenge angeben. Mit -1 wird der DoS Schutz deaktiviert.

Thema: SOAP Datentransfer bricht bei großen Übertragungen ab
Am im Forum: Netzwerktechnologien

Hab das ganze jetzt mal auf SoapMethod und SoapClient umgebaut und bekomme jetzt zumindest ein Timeout und das Logging auf der Serviceseite liefert eine Fehlermeldung:


            <faultcode>soap:Server</faultcode>
            <faultstring>System.Web.Services.Protocols.SoapHeaderException: Server unavailable, please try later ---&gt; System.IO.IOException: WSE2150: Write Failure. ---&gt; System.Net.Sockets.SocketException: Eine vorhandene Verbindung wurde vom Remotehost geschlossen
   bei System.Net.Sockets.Socket.EndSend(IAsyncResult asyncResult)
   bei Microsoft.Web.Services3.Messaging.SoapTcpNetworkStream.EndWrite(IAsyncResult asyncResult)
   --- Ende der internen Ausnahmestapelüberwachung ---
   bei Microsoft.Web.Services3.Messaging.SoapTcpNetworkStream.EndWrite(IAsyncResult asyncResult)
   bei Microsoft.Web.Services3.Messaging.SoapTcpNetworkStream.Write(Byte[] buffer, Int32 offset, Int32 count)
   bei System.IO.Stream.WriteByte(Byte value)
   bei Microsoft.Web.Services3.Messaging.Framing.FramingRecord.WritePadding(Stream stream, Int32 bytesWritten)
   bei Microsoft.Web.Services3.Messaging.Framing.FramingRecord.WriteChunkedPayload(Boolean endOfRecord, Boolean endOfMessage, Byte[] bytes, Int32 offset, Int32 count)
   bei Microsoft.Web.Services3.Messaging.Framing.FramingRecord.WriteChunkedPayload(Boolean endOfRecord, Boolean endOfMessage)
   bei Microsoft.Web.Services3.Messaging.Framing.FramingRecord.Close(Boolean endOfMessage)
   bei Microsoft.Web.Services3.Messaging.Framing.FramingStream.Close()
   bei Microsoft.Web.Services3.Mime.MimeWriter.Close()
   bei Microsoft.Web.Services3.Mime.XopPackageWriter.WriteAnyExtractedContent()
   bei Microsoft.Web.Services3.Mime.XopPackageWriter.WriteFullEndElement()
   bei System.Xml.XmlElement.WriteTo(XmlWriter w)
   bei System.Xml.XmlDocument.Save(XmlWriter w)
   bei Microsoft.Web.Services3.Mime.XopDocument.SaveToXopPackage(Stream stream, String infosetContentType, String boundary, String startId)
   bei Microsoft.Web.Services3.Messaging.SoapMtomFormatter.SerializeMessage(Stream stream, SoapEnvelope envelope, String mimeBoundary, String startId)
   bei Microsoft.Web.Services3.Messaging.SoapMtomFormatter.Microsoft.Web.Services3.Messaging.ISoapFormatter.Serialize(SoapEnvelope envelope, Stream stream)
   bei Microsoft.Web.Services3.Messaging.SoapMtomFormatterWithFraming.Microsoft.Web.Services3.Messaging.ISoapFormatter.Serialize(SoapEnvelope envelope, Stream stream)
   bei Microsoft.Web.Services3.Messaging.SoapTcpConnection.SerializeMessage(SoapEnvelope envelope)
   bei Microsoft.Web.Services3.Messaging.SoapTcpTransport.Send(SoapEnvelope envelope, EndpointReference destination)
   bei Microsoft.Web.Services3.Messaging.SoapTcpOutputChannel.Send(SoapEnvelope message)
   bei Microsoft.Web.Services3.Messaging.SoapReceiver.DispatchMessage(SoapEnvelope message)
   bei Microsoft.Web.Services3.Messaging.SoapReceiver.ProcessMessage(SoapEnvelope message)
   --- Ende der internen Ausnahmestapelüberwachung ---</faultstring>
            <faultactor>soap.tcp://chimera/SyncService</faultactor>
          </soap:Fault>

Google erzählt mir dazu leider gar nichts. Reflector bringt mich zu der Einsicht, dass der Socket unerwartet geschlossen wurde.

Die Protokollierung des Clients zeigt garkein Fehler.

Hat jemand ne Idee was man noch versuchen könnte bzw. woran es liegen kann?

Thema: SOAP Datentransfer bricht bei großen Übertragungen ab
Am im Forum: Netzwerktechnologien

Hi,

ich habe einen Datentransfer zwischen einem als WindowsService gehosteten Webservice und einem Client, beide verwenden WSE3 und das soap.tcp Protokoll.

Die Kommunikation zwischen beiden funktioniert soweit.
Jedoch bricht die Übertragung ab einer bestimmten SOAP Envelope größe einfach ab und der Client wartet ewig auf die Antwort vom Service und die Anwendung friert ein.
Es greift komischer Weise auch kein Timeout bei der Funktion : Microsoft.Web.Services3.WebServicesClientProtocol.Invoke(<WebMethodName, <ParameterObject>).

Ich hab mir das mal mit Wireshark angeschaut und der TCP Stream zum Client reißt einfach mitten im Envelope ab.

Ich hab leider keine Einstellungen bezüglich irgendwelcher Transfergrößen oder deren Dauer gefunden.

Hat jemand eine Idee woran das liegen könnte?

Gruß SkySurfer

Thema: WSE3 + Webservice als Windowsdienst -> unbekanntes URI Prefix
Am im Forum: Netzwerktechnologien

Die mit wsewsdl3 Tool generierte Proxyklasse für soap.tcp funktioniert erst ab einem Framework ≥ 3. Da auf Funktionen zugegriffen werden, die im 2.0 NotImplementetExceptions werfen.

Wenn man die VisualStudio Integration von WSE3 aktiviert und einen Webverweis erzeugt wird funktionierender Code generiert.

Thema: XML Serialisierungs und Deserialisierungsproblem
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Nach einigen Reflector Sessions weiß ich nun wieso es nicht geht ..

man endet beim deserialisieren immer in einem Aufruf von throw new NotImplementetException der in einem try / catch Block gekapselt ist und das auch nicht nach außen liefert.

Prädikat :

Thema: XML Serialisierungs und Deserialisierungsproblem
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

ich versende in XML serialisierte Objekte als soapEnvelopes unter Verwendung des WSE3.

Das Objekt hat den folgenden Typ:


[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://tempuri.org/")]
public partial class GetSchemaDTO
{
    private string[] _tableNames;
    public string[] TableNames
    {
        get { return _tableNames; }
        set { _tableNames = value; }
    }

    private SyncSession _syncSession;
    public SyncSession SyncSession
    {
        get { return _syncSession; }
        set { _syncSession = value; }
    }
}

serialisert bekomme ich davon folgende Envelope:

<soap:Envelope xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Header>
            <wsa:Action>http://tempuri.org/GetSchema</wsa:Action>
            <wsa:MessageID>urn:uuid:30a74143-212c-4ece-991f-2ed085e41853</wsa:MessageID>
            <wsa:ReplyTo>
                  <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
            </wsa:ReplyTo>
            <wsa:To>soap.tcp://localhost/SyncService</wsa:To>
            <wsse:Security>
                  <wsu:Timestamp wsu:Id="Timestamp-b2aa3487-93ec-41ac-b192-84115851ce30">
                        <wsu:Created>2009-08-21T07:58:23Z</wsu:Created>
                        <wsu:Expires>2009-08-21T08:03:23Z</wsu:Expires>
                  </wsu:Timestamp>
            </wsse:Security>
      </soap:Header>
      <soap:Body>
            <GetSchemaDTO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
                  <TableNames>
                        <string>Testtable</string>
                  </TableNames>
                  <SyncSession>
                        <OriginatorId>0</OriginatorId>
                        <ClientId>aa86afc5-12f4-48b1-9ad6-3f9cc3098b26</ClientId>
                  </SyncSession>
            </GetSchemaDTO>
      </soap:Body>
</soap:Envelope>

Wenn ich die empfangene Envelope aber wieder deserialisieren möchte bekomme ich nur null als Ergebnis.

Beispiel für die Deserialisierung:


            SoapServerMethod serverMethod = new SoapServerMethod(typeof (SyncService),
                                                                 new LogicalMethodInfo(
                                                                     typeof (SyncService).GetMethod("GetSchema")));    

            SoapEnvelope envelope = new SoapEnvelope();
            envelope.LoadXml(
                "<soap:Envelope xmlns:xop=\"http://www.w3.org/2004/08/xop/include\" xmlns:wsa=\"http://schemas.xmlsoap.org/ws/2004/08/addressing\" xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Header> <gekürzt> ");

            XmlReader bodyReader = envelope.GetBodyReader();
            object[] objArray = null;



            if (bodyReader != null)
            {
                if (bodyReader.IsEmptyElement)
                {
                    objArray = new object[0];
                }
                else
                {
                    bodyReader.ReadStartElement(bodyReader.LocalName, bodyReader.NamespaceURI);
                    bodyReader.MoveToContent();
                    objArray = (object[])serverMethod.ParameterSerializer.Deserialize(bodyReader, (serverMethod.BindingUse == SoapBindingUse.Encoded) ? envelope.CurrentSoap.EncodingStyle : null);
                }
                bodyReader.Close();
            }

Hat jemand eine Idee woran es liegen könnte ?

Gruß SkySurfer