Laden...

Profil von BillTuer

myCSharp.de - Member Mitglied seit

Alle Beiträge

15.09.2011 - 13:31 Uhr

Guten Tag.

Angenommen ich habe einen Webservice, dem ich Daten übergeben kann, die dann in eine Datenbank geschrieben werden.
Diesen Webservice spreche ich mit Ajax an.

Wie kann ich denn nun sicher gehen, dass nicht jeder, der den entsprechenden Aufruf kennt, direkt meinen Webservice, und damit meine Datenbank, mit Daten befeuern kann?
Alle Parameter können ja immer ausgelesen werden, da es sich um Javascript handelt...

Vielen Dank.

23.08.2011 - 17:50 Uhr

Habe jetzt einfach die OnServerClicks durch Post-Requests ersetzt.
Projekt übernehme ich nur temporär, daher konnte ich keine größeren Änderungen Richtung DB angehen.
Danke.

19.08.2011 - 14:05 Uhr

Ich war sehr lange in der ASP MVC Welt unterwegs und bin jetzt leider gezwungen, ein Projekt im klassischen Stil umzusetzen. Hilfe! 😉

Dabei habe ich folgendes Problem:
ich habe ein Control, welches ich auf einer Seite mehrfach einbinde. Dieses Control enthält einen Link, der ein onserverclick-Event auslöst und nach außen verfügbar macht. Die umgebende Seite abonniert dieses Event und reagiert entsprechend (in diesem Fall ein Vote für das entsprechende Item/Control).
So wie ich es jetzt verstanden haben, lädt der Postback quasi die Seite neu und führt danach mein Event aus (vote). Problem ist dabei nur, dass ich damit folgenden Ablauf habe:
Seite baut sich auf > Ich klicke vote > Postback > Vote wird in der DB gespeichert > Seite neu angezeigt > Vote ist aber nicht zu sehen (steht aber in der DB)
Erst ein Refresh der Seite zeigt dann auch wirklich den Vote an.

Es kann doch jetzt nicht Sinn der Sache sein, dass ich Abfrage ob ich mich im Postback befinde und dann den Vote nur für die Anzeige noch mal erhöhe.
Wie geht man denn normalerweise mit solch einem Szenario um?

Bei mir ging es um eine Excel-Datei, die komplette ausgelesen wird. Die ausgelesenen Daten sollten dann in ein entsprechendes Objekt überführt und in der DB gespeichert werden.
Ich reiche die Daten jetzt bis ins Repository durch und erstelle das Objekt erst dort und bei Bedarf, nicht mehr für alle Daten.
Klappt prima, vielen Dank für deine Hilfe.

Ok, würde behaupten, dass ich das so weit verstanden habe 😉

Ich muss die Id also bis ins Repository reichen und mir dort das passende Objekt holen... Oder gibt es noch andere Lösungsansätze?

Vielen Dank erstmal.

Aber wieso klappt es denn dann ohne den Repository-Aufruf? Dort weise ich doch dann quasi auch employee.Location =meinAnderesObjekt zu, oder nicht?

Ich habe in einem Daten-Model die Entity "Location" mit folgender Methode innerhalb des zugehörigen Repositories:


public Location GetLocation(int locationId)
{
    Location location = Context.Locations.First(l => l.Id == locationId);

    if (null == location)
        throw new ArgumentNullException("Location-Id: " + locationId);

    return location;
}

Diese Methode wiederum rufe ich in einer Methode > Schleife auf:


for (int i = 1; i <= values.GetLength(0); i++)
{
    Employee employee = new Employee();
    ...
    employee.Location = employeeRepository.GetLocation(locationId);
    ...
    employees.Add(employee);
}

Innerhalb der For-Schleife werden Objekte erstellt, einer Liste hinzugefügt und am Ende wieder an das Repository gegeben:


employeeRepository.UpdateEmployees(employees);

Nun habe ich folgenden Effekt: jedes Objekt, für welches ich GetLocation aufgerufen habe, hat den EntityState "added", obwohl ich an keiner Stelle etwas schreibe, sondern nur auslese. Rufe ich also SaveChanges auf, verdoppeln sich die gesamten Einträge in der DB.

Ändere ich also den Aufruf innerhalb der Schleife folgendermaßen, habe ich den Verdopplungseffekt nicht, da ich den Repository-Aufruf nicht habe:


for (int i = 1; i <= values.GetLength(0); i++)
{
    Employee employee = new Employee();
    ...
    employee.Location = new Location() { Id = 1, Name = "Berlin" };
    ...
    employees.Add(employee);
}

Hilfe! 😃
Vielen Dank im Voraus!

09.08.2010 - 10:10 Uhr

Ich möchte für eine bestehende Datenbank den Service Broker aktivieren, da ich momentan die Fehlermeldung "Der SQL Server Service Broker für die aktuelle Datenbank ist nicht aktiviert. Als Folge davon werden keine Abfragebenachrichtigungen unterstützt. Aktivieren Sie den Service Broker für diese Datenbank, wenn Sie Benachrichtigungen verwenden möchten." erhalte, wenn ich das zugehörige Projekt starten möchte.

Für die Aktivierung habe ich folgenden Befehl versucht: "ALTER DATABASE myDb SET ENABLE_BROKER"
Die Abfrage wird dann auch ausgeführt, scheint nur einfach kein Ende zu nehmen. Nach einer Laufzeit von 2,5 Tagen habe ich eben abgebrochen 😉
Gibt es eine andere Möglichkeit, den Service Broker zu aktivieren?

Update: Datenbank offline und dann wieder online schalten, Eigenschaften aufrufen und dort das Service Broker Flag auf true setzen. Jetzt gehts 😃

Argh, man muss einfach die Teamprojektsammlung noch mit in die URL packen, also z.B. http://xxx.xxx.xxx.xxx:8080/tfs/DefaultCollection. Klappt dann ohne Probleme 😃

Vielen Dank für deine Links!

Ich habe hier einen frischen TFS 2010 aufgesetzt und dieser läuft so weit ohne Probleme. Mit VS 2010 kann ich mich ohne Probleme verbinden, Teamprojekte erstellen etc.

Leider schaffe ich es jedoch nicht, mit Visual Studio 2008 zuzugreifen. Dies lag im ersten Schritt daran, dass der TFS 2010 standardmäßig eine URL wie http://xxx.xxx.xxx.xxx:8080/tfs hat, welche man in Visual Studio 2008 gar nicht eingeben kann.
Für dieses Problem gibt es ein Update von Microsoft mit dem tollen Namen "Visual Studio Team System 2008 Service Pack 1 Forward Compatibility Update for Team Foundation Server 2010". Dieses und das erforderliche SP1 für VS 08 habe ich installiert, was zur Folge hat, dass ich die richtige URL eingeben kann. Dennoch bekomme ich keine Verbindung zu meinem neuen TFS 2010.

Hat jemand eine Idee? Vielen Dank.

30.06.2010 - 11:10 Uhr

Nein, hat leider nix gebracht.
Wie gesagt, auf anderen Rechnern ist alles gut, nur auf meinem Entwicklungsrechner weigert sich die Ribbonleiste die neuen Elemente anzuzeigen.
Auch ein Neustart hat nix gebracht 😉

29.06.2010 - 15:08 Uhr

Update: veröffentliche ich das Add-In und installiere es auf einem anderen Rechner, erscheint dort auch die 7. Group mit Button. Handelt sich also wohl um ein lokales Problem.

29.06.2010 - 14:20 Uhr

Habe ein Excel Add-In geschrieben, welches einen eigenen Ribbon-Tab enthält, unter welchem sich sechs Groups mit Buttons befinden. Klappt alles prima.

Nun wollte ich eine siebte Gruppe mit einem weiteren Button hinzufügen, was im Designer auch ohne Probleme funktioniert hat. Allerdings taucht diese letzte Group nie auf, wenn ich das Add-In starte.
Bin sogar so weit gegangen und habe die Ribbonleiste komplett gelöscht und neu angelegt. Nun habe ich folgendes verhalten: nenne ich die Ribbonleiste nicht genau so, wie sie vorher hieß, wird sie nie angezeigt. Auch die Tabs, Buttons etc. müssen genauso heißen, wie es bei meiner letzten funktionsfähigen Version war. Dann erscheinen alle und funktionieren auch. Nenne ich jedoch nur ein Label anders, adde einen anderen Button etc., tauchen diese Elemente nie auf.

Habe das Add-In schon komplett gelöscht, den Debug Ordner etc. auch. Dennoch bekomme ich dieses Verhalten nicht weg. Woran liegt das?
Hat Office einen Cache für die Ribbonleiste, den ich noch löschen kann/muss? Habe aber schon öfter die Ribbonleiste erweitert und nie ein ähnliches Problem erlebt.

Ich erläutere noch mal genauer den Ablauf:

Es handelt sich um eine ASP MVC Anwendung mit verschiedenen Schichten. Im konkreten Fall kann der Anwender beliebig viele User auswählen, denen er eine bestimmte, personalisierte Email schicken kann. Der zuständige Controller bemüht dann die Service-Schicht, die für das Erstellen und Verschicken der Emails zuständig ist.
Ich würde nun gerne dem User ermöglichen, dass er die Anwendung weiter nutzen kann, ohne dass er auf die Generierung und Versendung der Emails im Service warten muss.

Hier mal der vereinfachte Code:


public void Recommend(int id, List<int> userIds, string personalMessage)
{
    List<User> users = userRepository.GetUsers(userIds);
    
    ThreadStart threadStart = delegate
    {
        foreach (var user in users)
        {
            emailManager.SendEmail();
        }
    };

    Thread thread = new Thread(threadStart);
    thread.IsBackground = true;
    thread.Start();
}

Starte ich den gesamten Vorgang mehrmals hintereinander (z.B. im Browser in verschiedenen Tabs), kommen nie alle Mails an. Auch bei geringen Mengen wie 3 Tabs und jeweils 1 Empfänger, kommen z.B. nur 1-2 Mails erfolgreich an.
Ich kann das Problem auch nachvollziehen, wenn ich statt dem Email-Versand einfach eine wilde For-Schleife reinpacke, die mehrere Sekunden läuft und dann entsprechende Breakpunkte setze. Die zuletzt angeworfenen For-Schleifen werden dann irgendwie frühzeitig abgebrochen. Wobei ich mir hier auch nicht ganz sicher bin, ob VS einfach so verschiedene Threads debuggen kann.

Ziehe ich das Versenden der Mails bzw. die For-Schleife aus dem Delegate raus und lasse den ganzen Vorgang "normal" ablaufen, gibt es keinerlei Probleme.

Hilfe! 😃

Bei mir gibt es leider Probleme: der Hintergrund-Prozess soll das Abschicken von Emails übernehmen.
Stoße ich den Vorgang nun mehrmals innerhalb kurzer Zeit an, so kommt nur die erste an.

Nehme ich den Code aus dem Background-Thread raus und lasse ihn im Main-Thread laufen, kommen alle Emails an.

Woran könnte das liegen?

Die verlinkte Quelle ist allerdings aus 2003...

Entsprechender Code wäre dann z.B.


System.Threading.ThreadStart threadStart = delegate { SomeMethod(variable); };
System.Threading.Thread thread = new System.Threading.Thread(threadStart);
thread.IsBackground = true;
thread.Start(); 

?

Was haltet ihr von dieser Aussage:

Asynchronous delegate invocation completely defeats the purpose of building an asynchronous handler because it draws from the same process-wide CLR thread pool that ASP.NET uses to service requests. While the primary request thread is indeed returned to the thread pool, another thread is taken out to perform the asynchronous delegate execution, which means that there is a net gain of zero threads for servicing additional requests, rendering the handler useless. You will run into the same problem if you use ThreadPool.QueueUserWorkItem to perform the asynchronous request processing because it also draws threads from the same process-wide CLR thread pool.

Quelle

Ich habe auch ein Szenario in einer MVC-Anwendung, bei welchem ich gerne das Abarbeiten einem anderen Thread überlassen würde.
Der oben Vorgestellte Ansatz mittels ThreadPool.QueueUserWorkItem klappt bei mir wunderbar. Ist dieses Vorgehen nun legitim oder nicht? 😃

Vielen Dank.

16.12.2009 - 14:48 Uhr

Update: in den Optionen des zugehörigen AppPools haben wir die Webgarden-Prozesse Mal auf einen reduziert, da waren 2 eingestellt.
Scheint das Problem behoben zu haben, beobachte das Mal weiter.

16.12.2009 - 13:04 Uhr

Wir haben eine ASP MVC Applikation, bei der gewisse Werte in die Session gepackt werden.
Nun haben wir das Phänomen, dass die Session bei manchen Requests "verloren" geht. Sprich: das komplette Session-Object ist null und enthält keinerlei Keys etc. Nach einem Reload der Seite passt alles wieder.
Wie kann das sein?

Weitere Beobachtung: lokal tritt das Problem nicht auf (Visual Studio IIS). Auf unserem Dev-Server jedoch immer wieder, reproduzierbar für alle User, wenn auch immer bei unterschiedlichen Requests.

Hilfe!
Danke 😃

10.12.2009 - 13:05 Uhr

Natürlich habe ich versucht, alle Fehler abzufangen, aber was weiß ich, was die Anwender für verrückte Dinge machen 😉

Checke dann erstmal, ob alle Exceptions auch wirklich abgefangen werden.

10.12.2009 - 12:29 Uhr

Ich habe ein Add-In für Excel geschrieben und ein zusätzliches Loader-Add-In, welches mit Hilfe einer Schaltfläche das eigentlich Add-In lädt (einen an bestimmte Eigenschaften eines Sheets geknüpften Autostart habe ich bisher nicht hinbekommen).

Das Add-In wird von mehreren Personen eingesetzt und läuft eigentlich ohne Probleme. Leider kommt es immer Mal wider vor, dass sowohl das Add-In selbst, als auch sein Loader, nicht mehr verfügbar sind, da sie von Excel deaktiviert worden sind. Um dies zu korrigieren müssen die User über Excel-Optionen > Add-Ins beide Add-Ins wieder aktivieren, was zwar machbar ist, so aber nicht sein soll 😉

Ich versuche nun herauszufinden, warum Excel meine Add-Ins manchmal nicht mehr mag. Google sagt mir, dass Excel so vorgeht, wenn ein Add-In zum Absturz von Excel führt.
Könnte dieses Verhalten auch durch Exceptions verursacht werden, die ich selbst schmeiße, aber nicht behandle?

Hat jemand von euch schon Mal ähnliche Probleme gehabt?


Excel.Worksheet.get_Range("C20", Type.Missing).Formula = "=TEXT(A2;\"MM\")";

07.09.2009 - 10:25 Uhr

Hallo norman,

erstmal danke für deine Antwort.

Die von dir erwähnten Lösungsansätze habe ich bereits probiert und die Datei wird ja auch erfolgreich kopiert. Leider jedoch nicht, wenn ich das Testprojekt innerhalb von Visual Studio starte. Irgendwie scheint dieses anders behandelt zu werden.

Pre-/PostBuild werde ich aber auch noch mal probieren, danke.

04.09.2009 - 15:54 Uhr

Es geht um ein ASP MVC Projekt, welches wiederum ein Testprojekt enthält, das mit Hilfe von Selenium Server verschiedene Tests durchführt.
Einer dieser Tests benötigt den absoluten Pfad zu einem Bild, welches auch Teil des Testprojektes ist. In den Eigenschaften wurde "Inhalt" beim Buildvorgang gewählt und das Bild wird nur ins Ausgabeverzeichnis kopiert, wenn es in einer neueren Version vorliegt. So weit, so gut.
Der Plan war nun, über

Assembly.GetExecutingAssembly().Location

auf den Pfad des Testprojektes zuzugreifen und somit auch an den absoluten Pfad des Bildes zu kommen.
Leider bekommt man aber einen Pfad in der Art von

P:\ProjectFolder\Development\TestResults\ComputerName 2009-09-04 15_02_19\Out

und nicht

P:\ProjectFolder\Development\TestProject\bin\Debug

Schade ist dies, weil das Bild sich nur im zweiten Ausgabeverzeichnis befindet, nicht aber im ersten.

Meine Frage ist nun: wie kann ich das Bild zwingen, auch mit in das Testresults-Verzeichnis mitkopiert zu werden?
Oder muss ich einen ganz anderen Ansatz wählen?

Vielen Dank!

01.09.2009 - 15:45 Uhr

Vielen Dank.
Dann lese ich den Artikel gleich noch einmal, diesmal mit geöffneten Augen 😉

01.09.2009 - 15:33 Uhr

Erstmal danke für deine Antwort!

Habe den Artikel gelesen und kann ihn jetzt so spontan nicht auf mein Problem beziehen... Ich habe ja kein Problem mit dem gruppieren bzw dem vergleichen, sondern möchte einfach auch noch die Werte ausgeben, die zum gleichen Objekt gehören, nicht aber für das Gruppieren verwendet worden sind...

01.09.2009 - 14:39 Uhr

Ich habe folgende Query, in der data eine List<Dataset> (Dataset ist eine eigene Klasse von mir) ist:


var groups = (from d in data
                          group d by new { d.Name, d.Client, d.Project, d.Job }
                            into groupedData
                            where groupedData.Count() > 0
                            select new Dataset { Name = groupedData.Key.Name, Client = groupedData.Key.Client, Project = groupedData.Key.Project, Job = groupedData.Key.Job }).Distinct();

Mein Problem ist nun, dass die Klasse Dataset über weitere Properties verfügt, die ich gerne befüllen würde. Meine Wunschvorstellung sähe also so aus:


var groups = (from d in data
                          group d by new { d.Name, d.Client, d.Project, d.Job }
                            into groupedData
                            where groupedData.Count() > 0
                            select new Dataset { Division = d.Division, Approval = d.Approval, Name = groupedData.Key.Name, Client = groupedData.Key.Client, Project = groupedData.Key.Project, Job = groupedData.Key.Job }).Distinct();

Das Problem ist, dass ich innerhalb des group by Kontextes nicht mehr auf mein "d" zugreifen kann. Kann ich das irgendwie umgehen oder besser machen?
Ein Ansatz wäre folgender, den ich irgendwie aber sehr umständlich finde:


var groups = (from d in data
                          group d by new { d.Name, d.Client, d.Project, d.Job }
                              into groupedData
                              where groupedData.Count() > 0
                              select new Dataset { Division = (from d in data where d.Name == groupedData.Key.Name select d.Division).First() }).Distinct();

Wenn ich das nun für 3-4 weitere Properties mache, habe ich eine endlos lange Abfrage...

Vielleicht noch mal kurz formuliert, was ich eigentlich will: ich will eine Liste mit Datasets nach bestimmten Properties gruppieren und dann auf alle Properties dieser sortierten Datasets zugreifen.

Vielen Dank.

24.08.2009 - 12:51 Uhr

Ok, denke so ist es schneller und schicker:


object[] values = new object[] { dataset.Name, dataset.Project, dataset.Job, dataset.Approval ? "ja" : "nein" }
wsData.get_Range("A1:A4", Type.Missing).Value2 = values;

24.08.2009 - 10:43 Uhr

Excel.Range range = (Excel.Range)wsInput.Cells[4, 1];
range.Value2 = dataset.Name;
range.get_Offset(0, 1).Value2 = dataset.Project;
range.get_Offset(0, 2).Value2 = dataset.Job;
range.get_Offset(0, 3).Value2 = dataset.Approval ? "ja" : "nein";
.
.
.

Wäre das die richtige Vorgehensweise, um mehrere Spalten innerhalb einer Reihe zu befüllen? Oder geht es auch schneller?

20.08.2009 - 13:41 Uhr

Das blinde Konvertieren war ja zum Glück nur der erste Schritt. Bin noch optimistisch, dass solche Optimierungen die Geschwindigkeit stark verbessern.

Vielen dank für den Tipp!

20.08.2009 - 13:07 Uhr

Es werden Daten zwischen verschiedenen Excel-Sheets hin und her kopiert, Statistiken erstellt und Berechnungen durchgeführt.
Weil dies mehrere Leute betrifft, war die Idee, ein Addin zu nutzen, da so die Verteilung und Wartbarkeit viel besser ist.
Außerdem treffen ständig neue Anforderungen ein, die in meinen Augen in C# sauberer realisiert werden können, als durch VBA Spaghetti-Code 😉

Allerdings ist die Geschwindigkeit sehr entscheidend. Es darf nicht sein, dass ein User 1 Minute warten muss, nachdem er auf die entsprechende Ribbon-Schaltfläche geklickt hat.
Es werden zum Teil schon ca. 50 Spalten und mehrere Hundert Reihen kopiert und im Hintergrund manipuliert. Hätte aber wirklich nicht gedacht, dass es so langsam wird 😦

Zurück auf VBA ist keine Option. Werde daher erstmal die ganzen while und for Schleifen mit Hilfe von Linq eliminieren und weitere Optimierungen machen. Hoffe, dass bringt was an Geschwindigkeit.

18.08.2009 - 11:06 Uhr

Ich habe hier größere Mengen von VBA in ein C# Excel-Addin überführt.
Dabei habe ich mir noch nicht großartig Vorteile wie Linq zu eigen gemacht, sondern erstmal den Code 1:1 migriert.
Nun habe ich das Problem, dass die Addin Variante unglaublich langsam ist. Grob geschätzt würde ich behaupten, dass die VBA-Version 10 Mal so schnell ist.
Ist dies zwangsläufig so, da VBA "näher an Excel dran" ist, oder kann ich durch Code-Optimierungen auf die gleiche oder sogar bessere Geschwindigkeit hoffen?

Vielen Dank.

12.08.2009 - 12:43 Uhr

Großartig! 😃

Das war zwar nicht direkt die Lösung des Problems, hat uns aber in die richtige Richtung geführt. Vielen Dank! Klappt jetzt bestens.

PS: ein Kollege, der sich momentan im Urlaub befindet, hat ein Caching eingebaut und dieses unzureichend kommuniziert und getestet.

12.08.2009 - 11:02 Uhr

Ich verwende hier das Entity Framework um eine MS SQL 05 DB zu mappen. Das ganze findet innerhalb einer Web-Anwendung statt, die das ASP MVC Framework verwendet.
Alles klappt wunderbar, solange ich von einem Szenario ausgehe, welches nur einen User enthält.

Sind mehrere Benutzer am Start, habe ich das Problem, dass die Änderungen, die ein User macht, nicht bei den anderen Usern ankommen. Erst wenn diese ihren Browser und damit die Anwendung neu starten, sind die Änderungen vorhanden.

Ich hoffe, dass ich einen grundsätzlichen Fehler mache, den man identifizieren kann, ohne dass ich hier meinen halben Code veröffentlichen muss.

Die Kommunikation mit dem Model/DB übernimmt eine Repository-Schicht. Wird dort eine Methode aufgerufen, die Änderungen an der DB vornimmt, wird dieser Vorgang mit einem


MyModelObjectContext.SaveChanges();

abgeschlossen.
Der User, der den Vorgang angestoßen hat, sieht sofort seine eigenen Änderungen und alles ist gut.
Ruft nun ein anderer User die gleiche Seite auf, sieht er immer noch den Stand, der aktuell war, als er die Anwendung gestartet hat. Die Daten werden über eine CompiledQuery im Repository gezogen:


myObject = compiledQueryGetMyObject.Invoke(MyModelObjectContext,id);

Jemand eine Idee, was hier falsch läuft?
Vielen Dank!

29.06.2009 - 18:21 Uhr

Ja, arbeite mit Office 2007 und VSTO.
Bei mir geht es um ein Excel-Addin, was innerhalb unserer Firma nur einem kleinen Kreis von Leuten (ca. 10 Leuten) zur Verfügung gestellt werden muss. Aus meiner Sicht reicht mir daher die Clickonce-Veröffentlichung. Ich kann auch damit leben, dass das Add-In einen "Unknown Publisher" hat.

In der Registry gibt es einen entsprechenden Pfad und auch einen Wert "LoadBehavior". Dieser steht wie von dir erwähnt auf 3.
Werde dann noch mal wegen Sicherheitseinstellungen schauen.
Danke.

29.06.2009 - 16:23 Uhr

Danke für deine Antwort.

Ich habe jetzt erstmal über Build > Publish mein Addin auf ein Netzlaufwerk gepackt. Dort erstellt er dann eine Setup-Datei und ich kann vorher auch einstellen, welche Voraussetzungen für das Setup von Nöten sind.
Installieren klappt dann auch prima, allerdings habe ich immer noch das Problem, dass ich das Addin bei jedem Start neu starten muss (Excel-Optionen > Add-Ins > COM-Add-Ins). Wieso?

29.06.2009 - 15:09 Uhr

Könntest du das bitte noch ein wenig genauer ausführen?
Was meinst du mit Programmverzeichnis?

Bei mir sind es im Release-Ordner zwei Dll-, eine manifest- und eine vsto-Datei (pdb außen vorgelassen).
Kann ich die jetzt irgendwie manuell auf anderen Rechnern einsetzen/installieren?

Auf meinem Rechner habe ich schon das Problem, dass ich das AddIn zwar unter den COM-AddIns in Excel finde und aktivieren kann, diesen Schritt aber jedesmal wiederholen muss, sobald Excel geschlossen wurde.
Was mache ich falsch?

Vielen Dank!

Ich habe einen Team Foundation Server, der jeden Abend um 23.30 Uhr einen Nightly Build auf einen Server packt.
Beispiele:
\ProjectXY\NightlyBuilds\NightlyBuild_20090513.17
\ProjectXY\NightlyBuilds\NightlyBuild_20090512
usw.

Der Freigabe-Ordner "NightlyBuilds" ist im IIS als eigene Webseite eingerichtet. Ich kann so über den Browser die einzelnen NightlyBuilds ansurfen.
Beispiel:
http://localhost:/NightlyBuild_20090513.17/Release/_PublishedWebsites/ProjectXY.MVC/Default.aspx

Wie man am Pfad schon sieht, enthält jeder NightlyBuild-Ordner eine eigene Published-Website mit bin-Ordner (inkl. DLLs) und eigener Web.config.
Rufe ich solch eine Published Website auf, sucht er natürlich im Root der IIS Website nach bin & Co, findet aber nichts und daher funktioniert die Webseite nicht.

Lange Rede, kurzer Sinn: wie kann ich den IIS so konfigurieren, dass alle Unterordner einer Webseite als eigene Webseiten behandelt werden könnten und er nicht immer im root sucht?
Da die NightlyBuilds-Ordner ja eine dynamische Benamung haben, will ich vermeiden, für jeden immer eine eigene Webseite im IIS einrichten zu müssen.

Hoffe, man kann verstehen, was ich meine. Ist ein wenig Durcheinander geworden. Tut mir leid.

13.05.2009 - 11:11 Uhr

Geholfen hat, meine lokalen VS Einstellungen zurückzusetzen.

Nun habe ich aber ein neues Problem: seit wir den Build-Dienst auf unserem TFS installiert haben, erhalten alle Clients folgende Fehlermeldung, wenn sie im Team Explorer eine Build Definition einrichten wollen: siehe Anhang

Jemand eine Idee?
Google findet leider so gut wie gar nichts. Und das, was man findet, bringt einen überhaupt nicht weiter.

04.05.2009 - 13:11 Uhr

Leider ist es jetzt erstmal der Trennzeichen-String geworden 😦
Der zuständige Flasher und ich werden aber bei Gelegenheit weiter testen, wie wir es schöner lösen können.

04.05.2009 - 12:03 Uhr

Ok, danke erstmal.

Aber ein Array, welches beliebig viele ints enthält, ist ein valider Parameter, richtig?
Mein Problem dabei ist, dass der Webservice aus Flash konsumiert wird und die Übergabe eines int-Arrays von dort aus nicht richtig zu funktionieren scheint.
Stellte mein Array Mal auf den Typ object um, vielleicht klappt es ja dann mit Flash.

Update: auch das Umstellen auf object hat leider nicht gebracht.
Hat jemand einen Tipp, wie ich per ActionScript ein Array an einen C# Webservice übergeben kann?
Würde nur ungerne den Umweg über einen String mit Trennzeichen gehen.
Vielen Dank.

04.05.2009 - 11:37 Uhr

Ich habe hier eine Webservice Methode, welcher ich gerne beliebig viele Parameter übergeben würde:


[WebMethod]
    public List<Route> GetRoutes(params int[] ids)
    {
        DbManager.host = Context.Request.Url.Host;
        List<Route> routes = new List<Route>();

        foreach (int id in ids)
            routes.Add(GetRoute(id));

        return routes;
    }

Will ich die Methode nun aber benutzen, akzeptiert er als Parameter nur ein int-Array. Das Keyword params scheint also ignoriert zu werden.
Kann ich bei einem Webservice so nicht vorgehen?

Vielen Dank.

30.04.2009 - 11:36 Uhr

Ich arbeite mich gerade mit Hilfe von MS Webcasts in den Team Foundation Server ein. Gleich in der ersten Ausgabe wird gezeigt, wie man tägliche Builds seines Projektes erstellen kann.
Schöne Sache, leider scheint es bei mir nicht zu funktionieren: bei jedem Projekt auf dem TFS zeigt der Build-Ordner im Team Explorer ein rotes Kreuz an und ich kann keinerlei Einstellungen vornehmen etc.

Hat jemand eine Idee, was da falsch läuft?
Vielen Dank.

Update: ich habe das zu öffnende Sheet einfach gelöscht und neu angelegt. Jetzt geht es. Komisch.

Ich habe ein Excel-Addin, welches im Hintergrund ein anderes Excelsheet öffnet und einige Werte ausliest. Dieser Vorgang hat bis gestern ohne Probleme geklappt.
Jetzt erhalte ich jedoch ein Popup mit der Meldung "Name darf integriertem Namen nicht gleichen", sobald das andere Sheet geöffnet wird. Innerhalb des Popups wird man aufgefordert einen neuen Namen für "_FilterDatabase" zu vergeben. Versuche ich das, scheine ich mich in einer Endlosschleife wiederzufinden, denn das Popup erscheint jedesmal erneut.

Habe im Code keinerlei Bezeichnet mit Unterstrich oder irgendwas in Richtung "_FilterDatabase". Auch scheint nichts mit einem reservierten Namen unter Excel zu kollidieren.

Jemand eine Idee, was ich falsch mache?

Vielen Dank.

16.04.2009 - 14:33 Uhr

Hört sich schlüssig an, danke.

16.04.2009 - 12:55 Uhr

Bin gerade dabei ein Addin für Excel zu schreiben. Dieses bedient einen sehr speziellen Anwendungsfall, welcher u.a. ein nach bestimmten Regeln formatiertes Excel-Sheet voraussetzt.
Zusammengefasst kann man eigentlich sogar sagen, dass die Funktionalität des Addins nur zur Verfügung stehen soll, wenn ein bestimmtes Excel-Sheet geöffnet wird.

Wie realisiere ich das am besten?

Vielen Dank.