Laden...

Forenbeiträge von typhos Ingesamt 243 Beiträge

13.11.2006 - 08:36 Uhr

dadurch das du den webservice an 2 orten wieder eingebunden hast gibt es 2x den typ wieder, die funktionieren aber nicht miteinander

Ganz genau. Ich habe es jetzt so gemacht ,wie von Dir vorgeschlagen. Ich habe noch eine "Zwischenschicht" (also eine eigene Assembly) eingebaut, die den Webservice referenziert und in die Webseite und die Controls-DLL eingebunden wurde.
Damit funktioniert es, wie gewollt.

Ich dachte halt, dass es einen einfachen/schnellen Weg gibt, das ohne zusätzliche Schicht oder "komplizierte Erweiterungen" funktioniert.

Jedenfalls nochmal vielen Dank für Deine Unterstützung!

10.11.2006 - 15:56 Uhr

Original von sheitman
ja ich hab das ausprobiert, bei mir geht das auch... probier du es mal aus. du hast ja die probleme 😉

Hab ich ja, aber - wie gesagt - funktioniert es bei mir nicht.

Also...
Ich habe meiner Webseite einen Webverweis auf den Webservice hinzugefügt. Dadurch wird eine WSDL-Datei erzeugt. Die drei angelegten Datei (*.wsdl, *.disco, *.discomap) liegen im Verzeichnis "App_WebReferences/MeinWebservice".
Im Webservice selbst habe ich eine Methode, die den Typ "ExterneLib.MeinTyp" zurückgibt. Wenn ich diese Methode aufrufe, bekomme ich natürlich nicht den Typ "ExterneLib.MeinTyp", sondern "MeinWebservice.MeinTyp", da dieser ja in der WSDL angelegt wurde.

So...
Nun habe ich ein weiteres Projekt, eine ClassLibrary (DLL) mit meinen Controls. Alle Klassen in dieser Lib sind im Namespace "MeineControls". Nun füge ich hier ebenfalls einen Webverweis auf den Webservice hinzu. Dann wird hier z.B. die schon erwähnt reference.cs und der ganze andere Kram angelegt. Dem Webverweis weise ich nun einen Namespace wie z.B. "Webservice" zu.
Nun habe ich aber nicht den Typ "ExterneLib.MeinTyp" oder - was auch noch passabel wäre - den Typ "MeinWebservice.MeinTyp", sondern ich habe hier nur den Typ "MeineControls.Webservice.MeinTyp".
Und ich kann halt nicht MeineControls.Webservice.MeinTyp in MeinWebservice.MeinTyp oder ExterneLib.MeinTyp konvertieren.

Also wie hast Du es denn gemacht, dass es bei Dir funktioniert 8o

10.11.2006 - 15:28 Uhr

Hmm, hast Du das mal ausprobiert? Ich glaube nicht, dass das funktioniert (oder ich bin wirklich zu blöd dazu).
In meinem Control (das ist also eine eigenständige DLL!) habe ich doch den Namespace "MeinWebservice" gar nicht zur Verfügung. Dort ist ja nur "MeineControls.Webservice" bekannt.
Und beim Hinzufügen eines Webverweises wird doch eine neue WSDL erzeugt. Oder meinst Du, ich sollte die WSDL aus der Webseite in mein Controls-Projekt kopieren? Geht das denn? Die würde doch jedesmal beim Kompilieren überschrieben werden 🤔

10.11.2006 - 14:20 Uhr

Ja, schon klar. Aber es sind ja trotzdem unterschiedliche Typen, wenn ich den Webservice einmal per Webreferenz in die Webseite einbinde und einmal in mein Control, oder nicht?
In meiner Webseite liegt die Webreferenz auf den Webservice im Verzeichnis "App_WebReferences/Webservice", damit hat mein Typ den vollen Namen "Webservice.MeinTyp".
In meinem Control füge ich den Webservice ebenfalls über eine Webreferenz hinzu und ich packe den - sagen wir einfach mal - auch in einen Ordner "Webservice". So, hier hat mein Typ aber den vollen Namen "MeinControlNameSpace.Webservice.MeinTyp".
Und damit sind die Typen (trotz gleichen Inhalts) doch unterschiedlich.

Oder meinst Du das evtl. anders?

10.11.2006 - 08:57 Uhr

Danke für Deine Mühe!
Ja, das Auslagern der Webservice-Aufrufe in eine eigene DLL wäre auch noch möglich - stimmt! Daran habe ich noch gar nicht gedacht.

problem ist halt das er nur aus daten besteht, und keine methoden mehr enthält...

Methoden brauche ich auch nicht, nur die Daten.

Mal sehen, vielleicht lagere ich die Webservice-Aufrufe wirklich in eine DLL aus... oder ich übertrage auch nur noch DataTables oder so was...

Vielen Dank nochmal für Deine Mühe und Hilfe!

09.11.2006 - 15:40 Uhr

Diese SchemaImporterExtension habe ich mir auch schon angesehen und schon ausprobiert. Aber irgendwie will es nicht.
Evtl. hapert's auch nur daran, dass die ImpoerterExtesion in den GAC muss - das möchte ich nicht.

Aber mal von einer anderen Seite betrachtet: Ich muss ja nicht unbedingt den "richtigen" Typ haben, es würde mir genügen, wenn ich den serialisierten (und dann deserialisierten) Typ, der in der WSDL-Datei angelegt wird, auch in mein Control (DropDownList) bekomme. Kann ich vielleicht die WSDL-Datei der Webseite irgendwie in das Projekt mit den Controls "importieren"? Also so, dass Control und Webseite die gleiche Webservice-Referenz/WSDL-Datei nutzen?

09.11.2006 - 14:50 Uhr

Nee, ich benutze auch 2.0. Und wie ich schon schrieb funktioniert das ja auch, wie Du es gemacht hast. Aber eben nur bei Assemblies (also Konsolenanwendung, DLL etc.). Wenn Du jetzt aber in VS mal eine neue Webseite anlegst und dort einen Webverweis auf den Webservice hinzufügst, wird dort keine reference.cs angelegt, sondern nur 3 Dateien (wie ich oben schon geschrieben hab). Und daher kann ich das so leider nicht lösen.

Probier's mal aus...

09.11.2006 - 14:04 Uhr

Na ja, wenn man zu einer Webseite einen Webverweis hinzufügt, wird halt keine reference.cs erzeugt. Es werden dort nur 3 Dateien angelegt (*.disco, *.discomap, *.wsdl) - mehr nicht.
Anders bei richtigen Assemblies, dort wird unter anderem immer eine reference.cs angelegt, in der man schön herumpfuschen kann 😉

Bin schon den ganzen Tag am Suchen und Probieren, aber bisher noch keine Lösung 😭

09.11.2006 - 12:16 Uhr

Erstmal vielen Dank für Deinen Einsatz!

Leider bekomme ich es aber einfach nicht hin. Den Artikel bei codeproject habe ich auch vorher schon gelesen und das funktioniert auch. Aber leider nur bei "richtigen" Anwendungen. Bei Webreferenzen in Webseiten gibt es ja keine reference.cs, sondern nur eine WSDL-Datei, also hilft mir das dort nicht weiter.

Die anderen Links habe ich auch alle durchforstet, aber entweder bin ich zu blöd, das dort genannte umzusetzen oder.... ich weiß auch nicht. Ich krieg es einfach nicht hin X(

09.11.2006 - 09:55 Uhr

Hi und Danke für die Antwort!

Ich habe auch schon versucht, den Typ in eine eigene Assembly auszulagern und habe diese in der webseite sowie im Control referenziert. Das Problem bleibt aber bestehen.
Denn der Typ wird ja in die wsdl-Datei eingetragen und die Methode vom Webservice liefert auf der Webseite den Typ MeinWebservice.Anrede, obwohl ich im Webservice die Methode so deklariert habe, dass der Typ ExtraAssemblyNameSpace.Anrede zurückgegeben wird. Der Typ wird einfach als complexType in die WSDL-Datei eingetragen und auf der Webseite wird nur der benutzt. Also habe ich wieder das Problem beim Befüllen der ComboBox:

MeinWebservice.Anrede kann nicht in ExtraAssemblyNameSpace.Anrede konvertiert werden

Ich bin am Verzweifeln... 🙁

09.11.2006 - 08:29 Uhr

Hallo,
ich habe einen Webservice geschrieben. Dieser stellt zum Beispiel über eine Methode eine Liste von Anreden bereit. Dabei kommt ein eigener Typ Anrede zum Einsatz. Dieser Typ wird ja dann auch in die wsdl-Datei eingetragen.
Wenn ich den Webservice dann als Webverweis in eine Webseite einbinde (unter dem Namespace MeinWebservice), dann steht der Typ Anrede ja auch auf der Webseite als MeinWebservice.Anrede zur Verfügung.

So weit, so gut...

Nun habe ich ein neues Projekt erstellt, in dem ich ein eigenes Control, abgeleitet von DropDownList, erstellt habe: ComboBoxAnrede. Die Klasse liegt im Namespace MeineControls.
In dieses Projekt habe ich den Webservice wiederum als Webverweis hinzugefügt. Hier bekommt der Webservice den Namespace MeineControls.Webservice.
Nun kann ich über oben angesprochene Methode alle Anreden ermitteln und die DropDownList befüllen.

Klappt auch wunderbar.

Nach dieser langen Vorgeschichte nun zu meinem Problem:
Ich habe in meiner ComboBoxAnrede auch eine Methode, um Einträge (Anreden) hinzuzufügen. Diese nimmt als Parameter natürlich ein Objekt vom Typ Anrede. Wenn ich nun von der Webseite (in die ich übrigens das Control eingebunden habe) eine Anrede zur DropDownList hinzufügen will, bekomme ich eine InvalidCastException, da der referenzierte Webservice in der Webseite und im Control unterschiedliche Namespaces haben und als unterschiedliche Typen behandelt werden:
MeinWebservice.Anrede kann nicht in MeineControls.Webservice.Anrede konvertiert werden

Genau genommen sind es ja aber dieselben Typen. Beide "stammen" von der Klasse Anrede in meinem Webservice ab und haben damit die gleichen Member usw.

Gibt es denn eine Möglichkeit, wie man dieses Problem lösen kann? Ich meine, ich finde die Typsicherheit von .NET ja prima, aber das hier geht mir zu weit.
Würde mich wirklich freuen, wenn jemand einen Tipp oder eine Alternative für mich hat...

Vielen Dank schon mal!

07.11.2006 - 11:35 Uhr

ChangePassword gibt es nicht in Membership. Die Methode befindet sich in MembershipProvider.

06.11.2006 - 11:31 Uhr

... außerdem sind somit mehrzeilige Strings möglich, wie:

string test = @"dies ist ein
mehrzeiliger
text";
06.11.2006 - 10:53 Uhr

Hi,
ich rufe Methoden eines (von mir erstellten) Webservices ab. Dieser kommuniziert wiederum mit einem Anwendungsserver, auf dem die BL-Klassen liegen.
Nun habe ich eine Methode geschrieben, die einen Rückgabeparameter besitzt -> Foo(ref object o)

Wenn ich nun aber auf die Webseite gehe, die den Webservice anspricht, bekomme ich folgende Fehlermeldung:

System.Web.Services.Protocols.SoapException: Die Anforderung konnte vom Server nicht verarbeitet werden. ---> System.Runtime.Serialization.SerializationException: Auf den Typ System.Runtime.Remoting.ObjRef kann aufgrund von Sicherheitseinschränkungen nicht zugegriffen werden.

Weiterhin steht auch folgendes da:

Folgendes wurde angefordert:
<PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="Infrastructure"/>
</PermissionSet>

Die einzigen zugelassenen Berechtigungen waren:
<PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="SerializationFormatter"/>
</PermissionSet>

Wie kann ich denn nun die fehlende Berechtigung setzen? Mit der PermissionSet-Klasse habe ich bereits ein wenig gespielt, konnte aber keine zufriedenstellenden Ergebnisse erzielen (gleiche Fehlermeldung).

Weiß jemand Rat?

06.11.2006 - 10:32 Uhr

Original von Traumzauberbaum
Das Problem ist, dass dein Client die echte Klasse nicht kennt, und GetType() da logischerweise nichts sinnvolles liefern kann. Woher soll er denn die Typinformationen für Reflection nehmen?

Eben! Genau as ist ja das Problem. Ich dachte, er nimmt die Typinformationen auch vom Interface...

Aber OK, ich mache es nun mit der von Dir vorgeschlagenen Methode: Ich habe im Interface (und der zugehörigen Klasse) nun eine Methode GetProperties() eingefügt, die mittels this.GetType()... die Infos holt.

Danke dafür!

@ Programmierhans: Mit SerializationInfo kenne ich mich (noch) nicht aus. Dazu brauche ich ja noch einen Formatconverter - keine Ahnung, wie das läuft.

03.11.2006 - 16:20 Uhr

Ja, das funktioniert schon. Aber das hilft mir nicht sehr weiter, da ich bei dem folgenden Aufruf eine NullReferenceException bekomme. Also findet er die Property wohl nicht im Objekt. Sie ist aber mit Sicherheit drin, aber ich werde mir wohl eine andere Lösung einfallen lassen müssen...

typeof(IMeinTyp).GetProperty("Eigenschaft").GetValue(mT, null)

Ich kann hiermit also auf die Eigenschaften zugreifen, aber nicht auf deren Werte, die im Objekt mT sind 🙁

edit: nur zur Info: Wenn ich zum Test die BL-Assembly im Client einbinde, in der auch die Klasse MeinTyp implementiert ist und mT auf MeinTyp caste funktioniert es problemlos. Nur mit den Interfaces geht es nicht, aber der client soll die Implementierung ja nicht kennen...

03.11.2006 - 15:38 Uhr

Hallo talla,
das habe ich auch schon probiert, aber mT.GetType().GetInterfaces() gibt ein leeres Array zurück.
Mir scheint, als würde ich dabei auch wieder nur die Interface-Liste von MarshalByRefObject zurück bekommen... 😭

03.11.2006 - 15:28 Uhr

Na komm schon. So schwer ist das doch nicht:

string tmp = split[1];
minutenlabel = decimal.Parse(tmp + (tmp.Length == 1 ? "0" : ""));
minutenlabel = (minutenlabel / 100) * 60;
03.11.2006 - 15:25 Uhr

Danke für den Tipp. Aber leider bringt mT.GetType().Name immer noch MarshalByRefObject.
IntelliSense zeigt mir ja auch an, dass mein Objekt vom Typ IMeinTyp ist, aber GetType().Name bringt immer den Basistyp MarshalByRefObject.

Ich find' das echt nicht mehr schön 🙁

03.11.2006 - 15:07 Uhr

Tipp: Gib mal 22,50 ein 😉

03.11.2006 - 13:59 Uhr

Hallo!
Ich habe (mal wieder) ein Problem mit Reflection. Und zwar versuche ich, mithilfe von Reflection (PropertyInfo) die Eigenschaften und deren Werte von Objekten auszulesen. Das ist eigentlich auch kein Problem und funktioniert prima.

Nur habe ich jetzt folgende Situation:
Es handelt sich um eine Client-/Server-Anwendung.
Ich habe mehrere Klassen erstellt, die von MarshalByRefObject erben und jeweils ein eigenes Interface implementieren. Die Klassen liegen am Server, der Client kennt nur die Interfaces.
So, wenn ich am Server Objekte (der dort vorhandenen Klassen) erzeuge und deren Eigenschaften auslese, funktioniert das gut. Wenn ich allerdings Objekte der auf dem Server liegenden Klassen am Client erstelle (dort sind sie ja dann vom Typ des zugehörigen Interfaces), bekomme ich bei der Typabfrage nur den Typ MarshalByRefObject. MarshalByRefObject kennt natürlich keine Eigenschaften und daher kann ich sie nicht auslesen.

Hier nochmal zur Verdeutlichung:

Auf dem Server:

public class MeinTyp() : MarshalByRefObject, IMeinTyp
{
}

MeinTyp myObj = new MeinTyp();
PropertyInfo[] test = myObj.GetType().GetProperties();

Das läuft prima und das PropertyInfo-Array test ist auch gefüllt.

Am Client:


IMeinTyp myObj = ErzeugeInstanzDesRemoteObjekts();
PropertyInfo[] test = myObj.GetType().GetProperties();

Hier ist test nicht gefüllt, weil GetType() eben nicht (wie von mir erwartet) IMeinTyp liefert, sondern den Basistyp MarshalByRefObject. Damit werden natürlich meine Properties nicht gefunden.

Hat jemand eine Idee, wie ich an die Eigenschaften sowie deren Werte des Remote-Objekts gelange?
Wenn ich ganz normal mit myObj.MeineEigenschaft darauf zugreife, funktioniert das selbstverständlich, nur halt nicht mit Reflection.

Würde mich wirklich freuen, wenn mir hier jemand helfen könnte.

03.11.2006 - 08:27 Uhr

Nein, das geht nicht. Du musst die Länge in der Methode überprüfen und dann evtl. abbrechen oder eine Exception werfen, wenn diese nicht stimmt.

30.10.2006 - 13:07 Uhr

Ist vielleicht das deutsche Sprachpaket zum .NET-Framework nicht installiert?

30.10.2006 - 12:14 Uhr

lulu.Length;

30.10.2006 - 10:37 Uhr

Original von frisch

  1. Na Orcas somd so Flieger die sich senkrecht bewegen, gibt es doch in C6C Tiberian Sun zu sehen 😄

Echt! Das weiß doch jeder 😁

@ mipa_acc:
Orca ist der Codename für das zukünftige Visual Studio 2007.

27.10.2006 - 14:57 Uhr

Das geht mittels Reflection. Schau Dir das Thema näher an. Es gibt eine Methode InvokeMember() mit der das dann erledigt werden kann.

edit: zu langsam 🙁

27.10.2006 - 14:54 Uhr

Das geht aber nur bei manchen Systemen, zum Beispiel MySQL. Bei SQL Server wäre es SELECT TOP 200 ...

Die Methode Fill des DbDataAdapters hat aber eine Überladung, der man Startindex und Anzahl Datensätze mitgeben kann:

DbDataAdapter MyAdapter ...

MyAdapter.Fill(ZielDataSet, Startindex, AnzahlZeilen, "Name");
27.10.2006 - 09:02 Uhr

OK, da hast Du natürlich Recht!

27.10.2006 - 09:00 Uhr

Ah, danke! Dann habe ich das den gleichen wert in der spalte a und b haben falsch verstanden.

Sorry!!

27.10.2006 - 08:58 Uhr

Sehe ich genauso wie herbivore. Ich z.B. habe den Sound dafür ganz abgeschaltet. Programmatisch würde ich da nicht dran herumpfuschen...

27.10.2006 - 08:46 Uhr

Original von herbivore
ist die Telekom dazu verknackt worden, bei echten Flatrates die Verbindungsdaten nicht zu speichern. Gleichzeitig gibt es aber Bestrebungen, die Provider zu einer Vorratsdatenspeicherung zur Strafverfolgung zu verpflichten.

Ja ja, so "konsequent" ist unsere Politik. Einfach wunderbar 😭

Danke, herbivore!

27.10.2006 - 08:40 Uhr

@ cb666: 'A' ungleich 'AA', also sind Spalte a und b nie gleich!

27.10.2006 - 08:14 Uhr

Danke für die Aufklärung, svenson. Aber dann habe ich nochmal eine Frage. Du schreibst:

Die Speicherung personenbezogener Daten ist z.B. auch dann für Unternehmen - ohne Zustimmung des Benutzers - erlaubt, wenn es zur Erfüllung des Geschäftsauftrages notwendig ist. Wenn du zum Beispiel deinem TK-Provider jede Speicherung untersagst, dann kann er dir ja keine Rechnung stellen. Deswegen braucht er dich hier nicht um Einverständnis bitten (für diesen Zweck!). Für die Speicherung über den Abrechnungszeitraum hinaus sieht das wieder ganz anders aus.

Wie ist es dann aber, wenn man bei besagtem TK-Provider eine (volumen- und zeitunabhängige) Flatrate hat? Dann ist die Rechnung ja eh immer die gleiche und die IPs werden eigentlich nicht benötigt. Dennoch werden sie mit Sicherheit gespeichert. ?(

27.10.2006 - 08:05 Uhr

Bin ebenfalls dafür 👍 Würde die Suche beschleunigen.

26.10.2006 - 16:08 Uhr

Wenn Du die Exceptions fängst und im Catch-Block nichts tust, dann bekommst Du natürlich auch keine Fehlermeldung. Du musst im Catch-Block zum Beispiel noch die Exception-Nachricht (ex.Message) ausgeben lassen.

26.10.2006 - 09:31 Uhr

Bin mir nicht sicher, aber vielleicht geht es mit dem Event ResizeBegin

25.10.2006 - 16:20 Uhr

Strings kannst Du mit CompareTo vergleichen:

string test1 = "a";
string test2 = "b";

if (test1.CompareTo(test2) < 0)
{
// test1 ist kleiner als test2
}
else if (test1.CompareTo(test2) > 0)
{
// test2 ist kleiner als test1
}
else
{
// test 1 ist gleich test2
}
25.10.2006 - 16:10 Uhr

Siehe mein edit im vorherigen Post.

25.10.2006 - 16:09 Uhr

Na dann fügt doch mal die System.Management DLL zu euren Verweisen hinzu. Und versucht dann nochmal das using 😉

edit: Im Projektmappen-Explorer Rechtsklick auf das Projekt und "Verweis hinzufügen" wählen, dann "System.Management" auswählen und OK.

25.10.2006 - 12:43 Uhr

OK, da fehlte bei meinem Code noch der Cast auf byte[]. Aber so habe ich es ja gemeint 😁

25.10.2006 - 11:55 Uhr

Versuch mal Folgendes:

System.IO.MemoryStream stream = new System.IO.MemoryStream(dt.Rows[0][5]);
System.Drawing.Image img = System.Drawing.Image.FromStream(stream);
25.10.2006 - 09:15 Uhr

Na wie wär's dann mit (System.Drawing.Image)dt.rows... ?

25.10.2006 - 09:06 Uhr

OK, nur da es Gang und Gebe ist, dachte ich halt, dass es legal ist. Danke für die Aufklärung, also mal wieder eine Grauzone...

25.10.2006 - 08:52 Uhr

Dazu müsste noch gesagt/geschrieben werden, dass man die Erstellung der XML-Datei erst aktivieren muss (siehe Projekt-Eigenschaften->Erstellen: XML-Dokumentationsdatei anhaken).
Ich weiß ja nicht, ob Du das schon gemacht hast, Muphin.

25.10.2006 - 08:43 Uhr

Original von ikaros
meines Wissens ist es derzeit verboten. Auf Webseiten werden ja auch sehr oft die IPs gespeichert (im Server-Log sowieso). Ist das denn so sehr anders, dass das erlaubt ist und Software, die die IP sendet, nicht? 🤔

24.10.2006 - 16:11 Uhr

Das "Top" gibt's doch schon bei jedem Beitrag!? 🤔

Reicht das denn nicht aus?

24.10.2006 - 14:24 Uhr

Vielleicht wird nichts angezeigt, weil Deine kommentare falsch sind (bei den Parametern). So wäre es richtig:

/// <summary>
/// sets which columns belongs to which legend
/// </summary>
/// <param name="t_column">column Nr</param>
/// <param name="t_legend">Legend Nr (from right to left)</param>
public void setLegendAffiliation( int t_column, int t_legend )
24.10.2006 - 10:39 Uhr

OK, wenn der Code imemr 2 Stellen vor das Komma setzt, habe ich den code auch verstanden, dann machen die Rauten auch wieder Sinn für mich. 😁

24.10.2006 - 09:07 Uhr

                if (oneLine)
                {
                    string all = sr.ReadToEnd(); //############## hier wird die Variable befüllt

                }
 

Stimmt nicht. Hier erzeugst Du eine neue, lokale Variable all. Lass das "string" weg, dann sollte es klappen.

24.10.2006 - 08:24 Uhr

Original von Rockpriest
Ich versteh das mit den Rauten zwar immer noch nicht,obwohl ichs mir in der Library jetzt zum 10ten mal durchgelesen hab.

Geht mir ähnlich. Könnte das jemand mal erklären? Könntest Du, joerguth, den angegebenen Code-Schnipsel mal erklären, warum dadurch jetzt nur E+3, E+6 usw. rauskommt.

Danke!