Laden...

Forenbeiträge von msycho Ingesamt 234 Beiträge

09.12.2011 - 09:50 Uhr

Hallo zusammen!
Ich möchte den Termstore aus SP 2010 exportieren. Dabei soll nach einem String gesucht werden. Der String kann dabei eine Group oder ein TermSet repräsentieren.
Ich überlege aktuell wie ich da vorgehe. Da es sowohl eine Group als auch ein TermSet sein kann, kann ich schlecht über GetTerms() gehen, oder? Bietet sich es in dem Fall eher an über TermSet.Groups[] und TermSet.TermSets[] zu gehen?
Habt Ihr hilfreiche Ideen?

Danke und LG!

09.11.2011 - 10:20 Uhr

So muessen zum Beispiel diverse variablen Properties gesetzt werden, die so ueber den von Dir genannten Namespace nicht ansprechbar sind.

Btw, fuer die Nachwelt vielleicht etwas Lektuere zum Einlesen:
Create the New User Object
Managing Directory Security Principals in the .NET Framework 3.5

Ich traue der Testing-Stage langsam auch nicht mehr. Auf andere Umgebungen portiert, funktioniert es einwandfrei. Offensichtlich stimmt da etwas ganz anderes nicht. 🙄

09.11.2011 - 09:50 Uhr

Abgesehen davon, dass damit die Authentizierung auch nicht funktioniert, hilft mir der Namespace nur bedingt. Der Namespace bietet mir nur begrenzt die Moeglichkeiten, die ich brauche, sodass ich UserPrincipal in DirectoryEntry wandeln muss.

Der eigene AppPool ist da und der laeuft jetzt auch unter dem besagten Benutzer. Es haette aus Wartungsgruenden in meinem Fall aber auch Vorteile gehabt, den Benutzer ueber die Config zu pflegen, aber das ist eine andere Geschichte.

Ich danke Euch!

08.11.2011 - 16:33 Uhr

Deine Vermutung ist vollkommen angebracht und auch richtig - und plausibel.

Hier wie gewuenscht ein vereinfachter Schnippsel:

string path = "LDAP://DC=test,DC=company,DC=org";
//relevante Stelle!
DirectoryEntry entry = new DirectoryEntry(path, 
"svcaccount", "svcaccountpassword");

//wir legen den user an und setzen die Props
DirectoryEntry user = entry.Children.Add("CN=Test User", "user");
user.Properties["sAMAccountName"].Add("testuser");
user.Properties["sn"].Add("User");
user.Properties["givenName"].Add("Test");
user.Properties["description"].Add("Test account added with code.");
user.CommitChanges();

//wir legen das Passwort fest
user.Invoke("SetPassword", new object[] {"mypassword1"} );

//der Acc ist enabled
user.Properties["userAccountControl"].Value = 0x200; 
user.CommitChanges();

08.11.2011 - 12:14 Uhr

Der Benutzer und das Passwort sind definitiv nicht falsch.
Wenn ich diesen Benutzer im AppPool verwende, funktioniert es; wenn er unter der ApplicationPoolIdentity rennt und ich (wie gewollt) im Code ueber DirectoryEntry.Username den Benutzer definiere mit dem ich auf die AD zugreife, kommt die Eingangs erwaehnte Fehlermeldung.

Was muss ich beachten, damit die im Code verwendeten Credentials Prioritaet haben?

04.11.2011 - 14:01 Uhr

Hi!

Ich habe hier ein WCF-Service, der ueber den DirectoryServices-Namespace auf die Active Directory zugreift.
Dem instanziierten DirectoryEntry Objekt kann ich ueber die Eigenschaften Username und Password den Benutzer angeben ueber den der Zugriff stattfinden soll.
Funktioniert alles soweit problemlos bis zu dem Zeitpunkt an dem ich den Service auf den IIS deploy.
Der Service laeuft unter einem bestimmten AppPool, der wiederrum unter einem bestimmten Service Account laeuft. Dieser Service Account hat keine Rechte auf die AD zuzugreifen. Soll er auch nicht; ich setze den zu verwenden Benutzer ja wie oben beschrieben im Code.
Doch genau hier ist das Problem. Der Benutzer unter dem der AppPool laeuft scheint Prioritaet zu haben. Denn ich kann mich anscheinend nicht erfolgreich authentifizieren ggue. der AD. Die Message lautet > Fehlermeldung:

unknown user name or bad password .
Sobald ich jetzt den Benutzer unter dem der AppPool laeuft, aendere auf den selben Benutzer, den ich auch im Code verwende, funktioniert der Zugriff einwandfrei.
Wie kann ich es realisieren, dass der Benutzer, den ich im Code definiere benutzt wird um sich ggue. der AD zu authentifizieren?

Danke und VG!

20.05.2010 - 13:22 Uhr

Die WSDL beschreibt den SOAP-Header nicht, nein - das ist richtig.

Ich habe aber eine Beschreibung vorliegen, wie der Header auszusehen hat.

Wenn ich den Dienst als Referenz einbinde und ich ihn aufrufe, bekomme ich entsprechende Fehlermeldungen als Antwort, dass eine Validierung nicht möglich sei, weil eben der Header nicht stimmt.

Genau hier ist, finde ich, die richtige Stelle um anzusetzen. Ich kann den Dienst offensichtlich ansprechen - nur mit einer unvollständigen Request. Kann ich an der Stelle einfach den SOAP-Header "manipulieren"?

19.05.2010 - 15:48 Uhr

Ehrlich gesagt, ist es mir im Moment selber unklar. 🙁

Ich hab hier ein Webservice bzw. die URL zur WSDL. Ich muss den ansprechen mit einem "besonderen" SOAP-Header.

19.05.2010 - 15:25 Uhr

Hi!
Ich muss für einen HttpWebRequest den SOAP-Header anpassen.
U.a. müssen dort die Nodes wsu:Timestamp, wsu:Created und wsu:Expires rein. Hat sowas schon mal wer gehört? Wie komme ich auf deren Values? Gibt's da was Fertiges vom Framework?

15.03.2010 - 14:06 Uhr

Erreicht man das nicht mit SetForegroundWindow() aus der user32.dll?

15.03.2010 - 12:57 Uhr

Und Leuten wie dem Fragesteller, die diesen Vorteil auch nicth auf Anhieb sehen

Ich sehe darin überhaupt keinen Vorteil. Im Gegenteil, ich werde mich hüten, den "Typ" zu verwenden.
Bzw. sollte man immer themenbezogen abwägen, ob man ihn benützt. Also z.B. var in Verbindung mit LINQ und dynamic in Verbindung mit, ich nenne es mal, Webseitenprogrammierung.

15.03.2010 - 10:50 Uhr

Wenn ich aber weiß, dass FooBar() zu meinem Typen passt, dann wird der Code nicht nur kompiliert sondern der Code läuft bei der Ausführung durch. Oder?

Also quasi so:


public sealed class MyClass {
  public MyClass() {

  }

  public Foo() {

  }
}

//...
dynamic whatever = new MyClass();
whatever.Foo(); //klappt
whatever.Bar(); //klappt nicht
15.03.2010 - 08:00 Uhr

Hallo!

Wo ist denn der Unterschied zw. den Datentypen var und dynamic?

So wie ich das verstehe, entscheidet beim Datentyp var der Compiler zur Laufzeit den wahren Typen der Variable. Bei dynamic hingegen muss man vorher schon den eigentlichen Typ wissen, damit auf die Klassenmember und Co zugegriffen werden kann.
Nur, wenn dem so ist, kann ich doch überall in Zukunft dynamic schreiben, oder? 🤔

15.03.2010 - 07:52 Uhr

Das wäre klasse!
Laut Schnittstellenbeschreibung kann ein abweichender Absender durch entweder bis zu 11 Zeichen oder bis zu 16 Ziffern angegeben werden.

12.03.2010 - 12:04 Uhr

Ich versuche es gerade zu testen. Ich habe nämlich ein änliches Tool geschrieben. Habe aber bei sms77 das Problem, dass die SMS bei Angabe eines Absenders mit 16 Ziffern (Vorgabe der Schnittstellenbeschreibung) nicht verschickt wird.
Ich kann allerdings keinen Absender bei deinem Tool angeben. Wieso nicht?

11.03.2010 - 16:36 Uhr

Laut MSDN muss der Benutzer entweder der gleiche sein wie auf der VS-Maschine oder der Monitor muss mit einem Benutzer gestartet werden, der zur Administratoren-Gruppe gehört.

Mit beiden Varianten funktioniert es nicht.

11.03.2010 - 15:48 Uhr

Die Liste und auch andere viele MSDN-Artikel kenne ich langsam in und auswendig. 😉

Vermutlich ist das Problem schon an den Firewalls zu suchen bzw. ein Port noch geschlossen. Aber alles was irgendwo genannt wurde, was eingerichtet sein muss, ist umgesetzt.

11.03.2010 - 15:18 Uhr

Hallo!

Ich versuche über das Internet eine Remotedebuggingsession aufzubauen.
Dazu wurde eine dauerhafte VPN-Verbindung über eine Gateway-Gateway-Verbindung auf beiden Seiten über die Firewall eingerichtet.
Die nötigen Ports wie TCP 135, UDP 500 und UDP 4500 sind jeweils offen. Der Debug-Monitor ist auf dem Host-Computer eingerichtet und läuft als Admin mit einem Administratoren-Benutzer.
Die VPN-Verbindung steht, ich bin über eine Remotedesktopverbindung auf dem Host. Ich kann den Host vom Client aus auch über den Namen anpingen.
Wenn ich jetzt allerdings über das Visual Studio (hier 2008 Team System) nach dem Qualifizierer suche (über Prozess anhängen), kommt folgende Fehlermeldung:

Die Verbindung mit dem Microsoft Visual Studio-Remotedebugmonitor mit dem Namen "user@hostname" konnte nicht hergestellt werden. Der Debugger kann keine Verbindung mit dem Remotecomputer herstellen. Dies kann daran liegen, dass der Remotecomputer nicht vorhanden ist oder eine Firewall die Kommunikation mit diesem verhindert. Weitere Informationen finden Sie in der Hilfe.

Hat das von euch schon mal jemand gehabt? Kann mir jemand helfen?

20.01.2010 - 10:14 Uhr

Ok, nochmals vielen Dank!

Könnt Ihr Anbieter empfehlen? Comodo wurde ja bereits als preiswerter Anbieter genannt.

20.01.2010 - 09:46 Uhr

Also habe ich dann letztlich meine Executables doppelt signiert?
Wozu dient denn jetzt dann die erste Signierung durch die PFX über das VS?

20.01.2010 - 09:19 Uhr

Okay, du hast mich endgültig überzeugt. Danke!

Nur was hat es dann mit dem digitalen Signierung mit einer Schlüsseldatei mit starkem Namen auf sich? Wozu hab ich das dann gemacht? Oder muss ich jetzt, wie Du sagst, die PFX austauschen, die jetzt das kostenpflichtige Zertifikat ist?

20.01.2010 - 08:58 Uhr

Ich habe auch den Eindruck, dass ich ein solches Zertifikat benötige.

Allerdings bin ich zwischenzeitlich noch mehr verwirrt.
Wenn ich nach "digitally sign" suche, find ich eigentlich alles zum Thema digitale Signierung von DLLs durch z.B. PFX. Für das Zertifikat muss ich nach "digitally certificate" suchen.
Der Wortlaut bei den Technical Requirements ist aber "Digitally sign".

Ich finde einfach nichts was meine Verwirrtheit auflöst.
Habt Ihr überzeugende Lektüre?

20.01.2010 - 08:21 Uhr

Ich bin gerade etwas verwirrt.
Unter den Technical Requirements for Win 7 Logo heißt es u.a. "Digitally sign files & drivers". Ist hier jetzt die Signierung der DLLs und Co über z.B. eine PFX gemeint oder die Signierung mit eines kostenpflichtigen Zertifikats um das es hier geht?

19.01.2010 - 15:33 Uhr

Ok, dann regelt das Windows selber mit dem Admin-Tolen in dem Fall.

Noch eine Frage zu der Manifest-Datei: Brauchen alle zur Application gehörenden Assemblys auch ein Manifest? Nein, oder?

Und, wozu soll die Code-Signierung überhaupt gut sein? Kannst Du hier informative Lektüre empfehlen?

19.01.2010 - 15:29 Uhr

Was passiert jetzt, wenn ich ein Manifest mit Requires Administrator habe und die Application von einem bereits elevated Process gestartet wird? Wird jetzt trotzdem nochmal (unnötig) das Admin-Token nachgefragt?

Zur makecert.exe: In der MSDN steht u.a. "Das Certificate Creation-Tool generiert X.509-Zertifikate, die ausschließlich für Testzwecke bestimmt sind.". Was passiert, wenn ich es für produktive Zwecke verwende?

19.01.2010 - 15:22 Uhr

Ich habe noch nicht ganz den Unterschied zw. HighestAvailable und RequiresAdministrator verstanden.

Ersteres wird meistens eben nicht Administrator sein, deswegen muss ich auf das Zweite setzen, richtig?

Zu dem Codesigning-Zertifikat: Kann man das selber machen? Ich habe einiges gefunden, was allerdings immer Geld kostet.

19.01.2010 - 15:07 Uhr

Wenn man eine Application von Beginn an mit dem Admin-Token starten will, reicht anscheinend ein Manifest aus.

Seh ich das richtig?

Des Weiteren: Wie kann ich die Informationen wie z.B. Herausgeber in der Anforderungs-Maske angeben?

19.01.2010 - 14:59 Uhr

Hallo!

Wie starte ich eine Anwendung von Anfang an mit dem elevated-Token?
Ich finde dazu überhaupt nichts.

22.12.2009 - 15:45 Uhr

Der Standardkonstruktor muss public sein wegen des OR-Mappers.

Aber gut, ich habe jetzt mal diese Factory-Methode implementiert und es scheint soweit zu funktionieren. Ist jetzt irgendwie verständlicher. 😁

Danke!

22.12.2009 - 14:46 Uhr

Das Blöde dabei ist jetzt halt, dass man wissen muss, dass man um ein Objekt dieser Klasse zu instanziieren, nicht den Standardkonstruktor aufrufen darf, sondern über die statische Methode gehen muss.

Sprich so:


MyClass obj = MyClass.CreateObject(p1, p2);
obj.DoSomething();

Auf der anderen Seite frage ich mich gerade, wieso die Factory-Methode statisch sein soll?


MyClass obj = new MyClass();
MyClass.CreateObject(p1, p2);
obj.DoSomething();

Wegen der einen Zeile Code?

22.12.2009 - 12:35 Uhr

Jetzt wo du es nochmal sagst, sehe ich, dass du nicht von dem Entwurfsmuster sondern einer einfachen Methode sprichs.t 🙂

Ich versuche mich jetzt gerade mal an dieser Factory-Methode.
Also einen public Standardkonstruktor brauche ich für den OR-Mapper.
Blos wie soll diese Factory-Methode ausschauen? Die Rückgabe ist ein Objekt von MyClass, das über eine GetSatz-Methode aus der Datenbank geholt wird, oder eben neu erstellt wird. Diese Logik habe ich jetzt mal in eine Methode namens GetObject realisiert.
Sollte die Methode jetzt static sein? Muss ich auf irgendwas achten?


public class MyClass
{
  private CWhatever whatever;

  public MyClass
  {

  }

  public static MyClass GetObject(CWhatever p1, string p2)
  {
    whatever = p1;
    return whatever.GetSatz(p2);
  }
}
22.12.2009 - 10:20 Uhr

Ich möchte nochmal zurück zum Factory-Pattern kommen.
Ich habe mich damit mal etwas beschäftigt. Durch folgendes Zitat aus dem Buch "C# 3.0 Entwurfsmuster" finde ich, dass es nicht das richtige für mich gewesen wäre: "Das Muster ist eine Möglichkeit, Objekte zu erzeugen, aber Unterklassen entscheiden zu lassen, welche Klasse genau zu instanziieren ist. Es kann mehrere Subklassen geben, die das Interface implementieren [...]".
Da ich nur eine Klasse instanziieren möchte und auch nur eine Klasse habe, steht es also nicht zur Debatte welche (Unter-)klasse ich instanziieren möchte.
Ich brauch vielmehr einen überladenen Konstruktor (plus Standardkonstruktor). Damit gebe ich an, welche Objekt ich mir in dem überladenen Konstruktor aus der Datenbank holen möchte. Erst, wenn das Objekt nicht vorhanden ist, erzeuge ich mir über den Standardkonstruktor ein neues. Ist ein allerdings ein Objekt vorhanden, mappe ich von Hand.

18.12.2009 - 09:49 Uhr

Ich habs jetzt von Hand zugewiesen, sind nur zwei Properties um die es geht. =)

18.12.2009 - 09:06 Uhr

Hallo!

Ich habe einen überladenen ctor einer Klasse über den ich ein bestimmtes Objekt dieser Klasse aus der Datenbank auslese.
Kann ich jetzt dieses Objekt der aktuellen Instanz zuweisen?

Instanziierung des Objektes meiner Klasse durch überladenen ctor:


MyClass mc = new MyClass(string p1, string p2);

public MyClass(string p1, string p2)
{
  //und jetzt nach dem Motto:
  this = CWhatever.GetSatz(searchString) as MyClass;
  //this ist aber schreibgeschützt
}
17.12.2009 - 11:01 Uhr

Es scheint doch zu gehen. Bin durch Zufall gerade darauf gestoßen. Sieht jetzt auf die Schnelle so aus und funtioniert:


                                XmlDocument doc = new XmlDocument();
				StringWriter strWriter = new StringWriter();
				XmlTextWriter xmlWriter = new XmlTextWriter(strWriter);

				doc.LoadXml(myString);
				xmlWriter.Formatting = Formatting.Indented;
				doc.WriteTo(xmlWriter);

				xmlWriter.Flush();
				xmlWriter.Close();

				mmeXMLEingabe.Text = strWriter.ToString();

Trotzdem ist es kein Problem, wie du gesagt hast, das selber zu schreiben. Mir ging es nur darum, das Rad nicht neu erfinden zu müssen. 🙂

17.12.2009 - 10:50 Uhr

Hallo!

Ich möchte einen string, der ein XmlDocument repräsentiert in einer Textbox anzeigen.
Allerdings soll es schön hierarchisch gegliedert sein.
Soll heißen, jeder Knoten in einer Zeile und je nach Hierarchie entsprechend eingerückt.
Gibt es hier eine fertige Methode vom Framework oder muss ich das manuell schreiben?

11.12.2009 - 08:04 Uhr

Hallo!

Sagt mal, bin ich blind, oder gibt es unter .NET 3.5 immer noch kein "FileSystem-TreeView"?

07.12.2009 - 15:11 Uhr

Es hat den Anschein als funktioniert jetzt das beschriebene Szenario doch, sofern ich das Programm A als Administrator ausführe.
Merkwürdig bzw. neu ist jetzt, dass ich beim Aufruf von Programm B in Programm A den absoluten Pfad von Programm B angeben muss.
Programm B wird einfach über Execute() ausgeführt, wobei bisher einfach der Dateiname von Programm B angegeben wurde. Unter Windows 7 wird Programm B anscheinend unter {system}/system32 gesucht, was falsch ist. Erst wenn ich den absoluten Pfad angebe, funktioniert es.

07.12.2009 - 14:55 Uhr

Klar ist es ein "Rechteproblem" wie du sagst.
Aber es scheint nicht ausreichend zu sein Programm A als Administrator auszuführen. Denn wenn Programm A das Programm B startet, das irgendwann auch noch Programm C ausführt, dann klappt das so trotzdem nicht.
Erst wenn ich Programm B als Adminstrator manuell aufrufe, kann Programm B arbeiten und auch Programm C aufrufen.

07.12.2009 - 14:48 Uhr

Hallo!

Folgendes Szenario:
Ich starte Programm A (.NET.exe). Das Programm A startet Programm B (Batch-File). Das Programm B registriert jetzt DLLs im GAC.

Wie setze ich das jetzt unter Windows 7 um?
Das Programm B kann nur arbeiten, wenn ich es manuell starte. Und zwar dann auch nur, wenn ich CMD als Adminstrator ausführe und von dort aus Programm B aufrufe.
Ich möchte aber einfach von Programm A Programm B aufrufen und beide Programme sollen ihre Arbeit ausführen.

03.12.2009 - 10:41 Uhr

Wenn ich das über ein eigenes Objektmodell serialisiere, dann brauch ich viele große Objektmodelle. Aber letztlich würde es sich glaube ich schon lohnen.

03.12.2009 - 10:16 Uhr

Danke. Zwischenzeitlich kommt aber die XML-Serialisierung nicht mehr in Frage.

Ich muss jetzt das in der Datenbank gespeicherte XML als XmlDocument lesen. Jetzt hat ja XmlDocument einen recht großen Overhead. Gibt es hier bessere, ressourcenschonendere Möglichkeiten als XmlDocument?

02.12.2009 - 10:58 Uhr

du kannst dir aufgrund der xml ein schema erzeugen lassen (das sind wenige klicks) und dieses schemal kannst du für die XSD.exe verwenden um dir die klassen zuerzeugen. der aufwand ist also eigendlich minimal.

Hast du da ein bisschen Lektüre für mich?
Gerade was diese Schemas anbelangt.

01.12.2009 - 17:02 Uhr

In der MSDN kann ich aber schlecht auf Erfahrungen anderer zurückgreifen, und um die geht es mir hier - kam vllt. nicht ganz so rüber. 😉

01.12.2009 - 16:55 Uhr

Jetzt mal abgesehen vom Aufwand, findest Du das auch die effizienteste Variante? Also auf XmlSerializer zu setzen. Wieso?

01.12.2009 - 16:21 Uhr

Hallo msycho

Wenn du SQL Server 2005 oder 2008 hast wäre es erstmal wichtig von NTEXT auf XML (gibt's auch) als Datentyp umzustellen (NTEXT ist obsolet und fliegt nach SS2k8 raus). Zum Manipulieren kannst du dann auch XQuery verwenden, damit vermeidest du dass immer alles geschrieben wird.

Hm, ich setze genau auf NTEXT, weil ich auch kompatibel mit 2000 sein muss und dort gibt es ja kein Datentyp XML.

Zu deiner Frage bzgl. der "Größe":
Für den XmlSerializer ist's sicher nicht zu groß, der ist beschränkt auf das was deine Hardware aushält. Wenn du auf den DB-Spaltentypen XML umstellst kannst du auch einen XmlReader als Wert übergeben, dann kannst du die Daten wenn nötig auch streamen.

Der Aufwand ist halt einiges größer finde ich als wenn ich aus dem gespeicherten string ein XmlDocument erzeuge. Ich sehe keine Vorteil trotz des größeren Aufwands.
Verstehe ich dich hier also richtig, dass du es empfehlst über einen XmlSerializer zu gehen?

01.12.2009 - 15:06 Uhr

Hallo!

Ich habe in einer Datenbank in einer Tabelle in einem Feld vom Datentyp ntext eine XML.
Was ist Eurer Meinung nach die effizienteste Methode das XML zu lesen und zu schreiben? Über ein XMLSerializer?

Serialisierung ist hier m.M. nach eher der falsche Ansatz.
Denn es ist ein recht mächtiges XML und dafür müsste ich ca. 20 Klassen schreiben. Ist das dann nicht zu "groß" für XmlSerializer?

25.11.2009 - 11:38 Uhr

Was meinst Du mit "entsprechend erweitert bzw. einbaut"?

24.11.2009 - 15:07 Uhr

Meine eingangs genannte Lösung war doch richtig.

Das Problem war, dass der Verweis im VS nicht richtig gesetzt wurde und noch auf die alte unsignierte DLL gezeigt hat.

24.11.2009 - 14:09 Uhr

Hier ist anscheinend das Problem.
Ich habe eine pfx und keine snk. Bei dem Parameter "keyfile" kann ich anscheinend keine pfx mitgeben.