Announcement

Collapse
No announcement yet.

Problem mit eigener Klasse

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit eigener Klasse

    Hallo,

    ich habe ein Problem bei der Übertragung von Daten mittels Webservice. Das ganze verhält sich wie folgt:

    1) Eigene Klasse für Benutzerdaten:

    [Serializable()]
    public class BCUser : ISerializable
    {

    private string m_sUserName;

    // Standardkonstruktor
    public BCUser()
    {
    m_sUserName = "";
    }

    // Eigenschaft veröffentlichen
    public string UserName
    {
    get
    {
    return m_sUserName;
    }
    set
    {
    m_sUserName = value;
    }

    // Deserialization
    public BCUser(SerializationInfo info, StreamingContext ctxt)
    {
    UserName =
    (string) info.GetValue("UserName", typeof(string));
    }

    //Serialization
    public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
    {
    info.AddValue("UserName", UserName);
    }

    }

    2) Definieren eines Webservives WSUser mit folgender Methode:

    [WebMethod]
    [XmlInclude(typeof(BCUser))]
    public BCUser getUserName()
    {
    BCUser aUser = new BCUser();
    aUser.UserName = "Hans Wurst";
    return aUser;
    }

    3) Aufruf im Client:

    ProxyWSUser.WSUser ws = new ProxyWSUser.WSUser();
    ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
    ws.Url = this.Url + "WSUser.asmx";

    BCUser aUser = ws.getUserName();

    Und hier kommt dann die Fehlermeldung:

    "Implizite Konvertierung des Typs 'ProxyWsUser.BCUser' zu 'BCUser' nicht möglich"

    Auch eine explizite Umwandlung führt nicht zum Ziel.

    Kann mir da evtl. jemand weiterhelfen???

    Vielen Dank im Voraus,

    Stefan

  • #2
    Muss das Attribut: [XmlInclude(typeof(BCUser))] nicht in die Deklaration von BCUser?
    Bei mir funktioniert es auch ohne das Attribut

    Comment


    • #3
      Hallo,

      habe gerade mal versucht die Instanz der Proxy-Klasse zu serialisieren und anschließend eine Deserialisierung vorzunehmen...ging auch schief *grummel*.

      Hier ein bischen Code um grübeln:

      ProxyWSUser.WSUser ws = new ProxyWSUser.WSUser();
      ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
      ws.Url = m_sUrl + "WSUser.asmx";

      ProxyWSUser.BCUser aProxyUser = ws.getUserName();

      tbUserName.Text = aProxyUser.UserName; // hier is noch alles ok

      // Vorarbeiten

      XmlSerializer aSerializer;
      MemoryStream aStream;
      StreamWriter aStreamWriter;
      string aXmlString;
      byte[] buffer;
      System.Text.Encoding aEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");

      // Serialisierung in einen XML-String
      aSerializer = new XmlSerializer(aProxyUser.GetType());
      aStream = new MemoryStream();
      aStreamWriter = new StreamWriter(aStream, aEncoding);
      aSerializer.Serialize(aStreamWriter, aProxyUser);
      buffer = aStream.ToArray();
      aXmlString = aEncoding.GetString(buffer, 0, buffer.Length);
      aStream.Close();

      // mal das Ergebnis ausgeben lassen...
      tbTest.Text = aXmlString;

      // Deserialisierung
      aSerializer = new XmlSerializer(typeof(ProxyWSUser.BCUser));
      aStream = new MemoryStream(aEncoding.GetBytes(tbTest.Text));

      // Und hier knallt es dann *seufz*
      BCUser aUser = (BCUser) aSerializer.Deserialize(aStream);
      aStream.Close();

      ws.Dispose();

      Gibt es denn keine Möglichkeit ein Objekt der Proxyklasse "ProxyWSUser.BCUser" in die Ursprungsklasse "BCUser" umzuwandeln???

      Vielleicht kann mir da ja mal jemand auf die Sprünge helfen...

      Stefa

      Comment


      • #4
        Hallo,

        wenn ich folgendes durchführe funzt es:

        1) Entfernen der Klassendefinition in der Proxy-Klasse meines Webservices (ProxyWSUser.BCUser)

        2) Einfügen eines Verweises auf die Assembly in der die Klasse BCUser definiert ist: using MyNamespace.Common

        Wie aber bringe ich nun Visual Studio dazu dieses automatisch durchzuführen???

        Zum Verständnis:

        Ich habe in einer Projektsolution u.a. folgenden Projekten:

        1) Common: typisierte DataSets, Klassendefinitionen
        2) DomainLayer: Businesslogik
        3) WinGUI: Windows-Client
        4) WebServices: Webservices
        5) SqlDataAccess: Datenzugriffsschicht für MS-SQL
        6) OraDataAccess: Datenzugriffsschicht für Oracle

        Wie stelle ich es nun an daß die Proxy-Klassen in der GUI-Schicht auf die in der Common-Assembly festgelegten Klassen-Definitionen zugreifen und beim Erzeugen der Webreferenzen nicht automatisch neue erzeugt werden?

        Vielen Dank im Voraus.

        Stefa

        Comment

        Working...
        X