Ähm - doch doch machen sollst du sie schon, aber du nimmst sie aus einer Liste heraus, übersetzt sie und legst sie danach in der "schon abgearbeitet" Liste ab, etwa:
public List<WhateverObject> TranslateAll() {
Queue<WhateverObject> originals;
List<WhateverObject> results;
//Originials füllen
while(originals.Size > 0)
{
var current = originals.Pop();
TranslateObject(current);
results.Add(current);
}
return results;
}
Wenn ich nur mal rate, würde ich sagen, du machst das was wir da sehen in AddUser (das bringt so nix, denn du machst es auf eine NEUEN Form1, die du niemals anzeigst)
Richtig wäre also in Form1 sowas wie:
//..
Form AddUser = new AddUser();
AddUser.FormClosed += AddUserFormClosed;
AddUser.Show();
//..
und AddUserFormClosed (ebenfalls in Form1) etwa so:
Du musst eine Topologie (für eine topologische Sortierung) aufbauen.
Im Endeffekt musst du also die Übersetzungen als Pfade und die Werte als Knoten in einem Graph verstehen. Da dein Pfad (bzw. Graph) gerichtet ist, kannst du ein Ende und einen Anfang ausmachen.
Wenn du nun von Ende bis Anfang sortierst, dann hast du dein Ergebnis.
Ah - das ist auch ne gute Idee - ich habe eben versucht das ganze über ein CacheMiss Event zu regeln. Damit laufe ich aber gefahr, dass mehrere Instanzen die den Cache nutzen das Objekt versuchen zu setzen.
Vielleicht versteh ich was nicht, aber wenn ich ein Element hinzufügen will - dann habe ich es offensichtlich schon - warum sollte ich dann ein vorhandenes aus dem Cache nehmen?
Aber das hängt wohl indirekt mit dem Callback zusammen, den ich noch nicht gefunden habe ...
ich versuche grade ein paar Daten in einem System.Runtime.Caching.MemoryCache abzulegen.
Dabei bin ich über folgende Fragestellung gestolpert:
Wenn ich einen Cache-Miss habe - gibt es die Möglichkeit einen Callback (zu registrieren (beispielsweise einen der auf dem Key operiert), der automatisch aufgerufen wird, oder muss ich das "per Hand" machen?
Und welchen Sinn macht eigentlich die AddOrGetExisting-Funktion?
Vielleicht kannst du ein OCR benutzen und auf den "eingemalten" Text loslassen.
Es gibt dort bestimmt verschiedene Schnittstellen dafür (die sind aber tendenziell nicht kostenfrei z.B. Abbyy)
Ein Einzelnes Enum wird deine Anforderung nicht erfüllen können, aber du kannst ein Enum definieren und anschließen (statische) Zugriffsklassen/Properties definieren, wie zum Beispiel:
namespace MimeType {
enum MimeTypes {
// ...
}
public static class Audio {
public static MimeTypes MPEG { get { return MimeTypes.AudioMPEG; } }
public static MimeTypes WAV { get { return MimeTypes.AudioWAV; } }
}
}
Ich weiß nun nicht, ob der Client schon fest definiert ist, aber ich kann dir zumindest sagen, wie der SQL-Server das Regelt:
Und zwar hat jede Meldung eine Nummer - hinter den Nummern versteckt sich eine Einfacher Format-String und dann wird der Formatstring ausgewertet und die {0} werden ersetzt durch die übergebenen Parameter.
Genau das kannst du auch tun.
Übermittle die Nachricht als Formatstring (oder nur eine NAchrichtennummer) und den variablen Inhalt als array oder Liste.
Dann kannst du einfach die gesamte Meldung erzeugen und außerdem Feststellen, ob du die Meldung schon kennst und referenzieren kannst.
Wenn es deine eigene Assembly ist, kannst du ihr einen Starken Namen verpassen, indem du sie beim Kompilieren auch gleich Signierst - das kannst in den Projekteinstellungen setzen.
Dazu brauchst du eine Signatur, die du dir mit sn.exe erstellen kannst.
401 heißt, dass du nicht Authentifiziert bist - dabei geht es nicht um das PHP Skript, sondern um den Aufrufenden Benutzer (also derjenige der den Webbrowser öffnet).
Der hat nämlich keinen Zugriff auf die Resource, die du dort haben willst.
Auch wenn ich mich wiederholen sollte:
Solche Fehler sieht man, wenn man den Fiddler oder ähnliche Tools verwendet.
du benutzt einfach den ServiceClient (bzw. Proxy), und rufst die Asynchrone Methode auf. Vorher abonnierst du das completet event und dort erhälst du in den Event Arguments alle nötigen Informationen.
Ich habe ein Problem beim übergeben eines Parameters via Powershell.
Es handelt sich um das Exchange2010 PS-Addin und ich versuche eine Emailadresse (Alias) hinzuzufügen:
using (var pipeline = ExchangeManagementShell.CreatePipeline())
{
var command = new Command("Set-Mailbox");
command.Parameters.Add(IdentityParameter, username);
//property = "EmailAddresses"
//value = "@{Add='neuesAlias@example.com'}"
command.Parameters.Add(property, value);
pipeline.Commands.Add(command);
pipeline.Invoke();
if(pipeline.Error != null && pipeline.Error.Count > 0)
throw new ApplicationFailedException(pipeline.Error.Peek().ToString());
}
Damit generiere ich folgende Fehlermeldung:
Fehler
Cannot convert '@{Add='neuesAlias@example.com'}' to the type 'Microsoft.Exchange.Data.ProxyAddressCollection' required by parameter 'EmailAddresses'.
The address '@{Add='neuesAlias@example.com'}' is invalid: "@{Add='neuesAlias@example.com'}" isn't a valid SMTP address. The domain name can't contain spaces and it has to have a prefix and a suffix, such as example.com.
Der Befehl den ich ausführen möchte, sieht etwa so aus:
Zum Stream gehört eine Position. Das ist ein Zeiger, wo du grade im Stream liest. Wenn du stream.Read ausführst, wird AB dieser Position gelesen.
Mit Seek(0, Begin) kannst du diese Position auf 0 zurücksetzen und somit liest du wieder den ganzen Stream.
Ähnlich wie bei einer Kasette könnte man sagen (nur ohne umdrehen).
Ich würde tippen der "offizielle Ansatz" heißt "reboot for Software-Maintenance"
Wie dem auch sei - falls du zwei Server hast, die in einem Load-Balance Verbund stehen kannst du auch einen entfernen, dort updaten, dann den LoadBalancer auf den Upgedatetn umschalten und selbiges das Update auf dem anderen Server machen - das wäre wohl ne ganz saubere lösung.
Oder du gibst den usern in zukunft einen Link und installierst in verschiedene Verzeichnisse, dann musst du nur den Link ändern (was leider bei den Freigabe-Leuten schwer wird).
Schnelle und recht saubere Lösung per Skript:
Alle Verbindungen schließen (also TS-Sitzungen und SMB-Sitzungen), Software austauschen, Verbindungen wieder erlauben. Das ganze ankündigen und Nachts laufen lassen.