Hallo die Frage ist bereits etwas älter aber ich habe dazu ein Projekt auf GitHub gefunden das sich sehr Intensiv mit dem Thema auseinandersetzt.
Es gibt dort auch eine Test Software mit der du verschiedene Funktionen ausprobieren kannst.
Ich habe auch noch andere DLLs die nicht auf nuget verfügbar sind. Meine Frage geht mehr in die Richtung wie andere Entwickler mit dieser Problem Stellung umgehen.
Ich hab ein C# Projekt in dem ich mehrere unmanaged DLLs (OpenCV) benötige. Das Projekt selbst ist auch ein Library Projekt. Ich möchte dieses als nuget Paket bereitstellen.
Ich habe jetzt eine Lösung gefunden bei der ich die unmanaged DLLs zum nuget paket hinzufügen kann und diese werden dann per install.ps1 ins ziel projekt verlinkt und so eingestellt das sie beim kompilieren mit kopiert werden. Die Lösung finde ich grundsätzlich nicht so schlecht, nur werden die ganzen DLLs jetzt direkt in der obersten Ebene vom Ziel Projekt verlinkt das macht das ganze ein wenig unübersichtlich. Auch sind die OpenCV DLLs recht groß und es ergibt sich ein riesiges Paket mit mehr als 20MB.
Mich würde interessieren wie ihr diese Problem Stellung angeht, mir ist es wichtig das ich nicht von irgendwelchen Laufwerken DLL Dateien rum kopieren muss.
Vielen Dank für die Informationen, ich bin nun auch schon ein wenig weitergekommen beim einarbeiten.
Folgende 2 Möglichkeiten finde ich interessant:
1) Die Lösung von LaTino, hier bekommt man ein angular Projekt der aktuellen Version 4 und das ganze in ein Visual Studio Projekt verpackt mit asp.net Controller Anbindung und schon einem kleineren Seiten Aufbau als Demo Anwendung sowie man es sich bei MVC gewöhnt war. Über den Umweg das Projekt per Command Line zu generieren.
2) Visual Studio Code installieren, NodeJS installieren und dann per "npm install -g @angular/cli" die angular-cli installieren. Hier kann dann auch wieder per Command Line ein Projekt erstellt werden das aber kein Visual Studio Projekt ist sondern ein Ordner mit ein paar configs und allen benötigten Dateien. Das Projekt wird dann mit "ng new PROJECT-NAME" erstellt und gestartet wird das ganze dann auch per "ng serve". Das Webprojekt was man hier erhält ist sehr bescheiden ein einfacher Demo Text fertig...
Um angular Component, Directive, Pipe, ... zu erstellen arbeitet man auch wieder in der Command Line und gibt hier die befehle ein, die dann die benötigten Dateien und Ordner erstellen.
Wobei ich derzeit eher auf Vorschlag 2 tendiere da man hier mehr Beispiele findet. Auch ist Visual Studio Code echt sehr flott. Und man somit auch eine klare Trennung zwischen dem Frontend und dem Backend hinbekommt. Ich werde sobald ich noch mehr Erfahrungen gesammelt hab hier nochmal meine Erfahrung posten.
Ich war längere Zeit nicht mehr mit Webentwicklung beschäftigt habe zwar hin und wieder etwas mit MVC entwickelt würde jetzt aber bei Angular 4 gerne wieder einsteigen.
Ich habe mich heute schon ein wenig damit auseinander gesetzt nur finde ich nicht wirklich den richtigen Start in die Materie.
Welchen Projekttyp verwendet ihr im Visual Studio für Angular früher bei Version 1 hat man ja das ganze noch per nuget nach installiert das fehlt mir jetzt komplett auch habe ich gelesen man soll das Controller Projekt vom Frontend (CSS, Views, Typescirpt, Javascript) trennen... Installier ich jetzt nodejs für das Frontend und lade mir die ganzen Abhängigkeiten über die angular cli? Ich hab leider keinen guten Leitfaden gefunden. Könnt ihr mir hier etwas empfehlen?
Zu diesem Thema gibt es auch ein C# Projekt auf Github. Die Feiertage werden auch Dynamisch berechnet und es werden derzeit 23 Länder unterstützt. Deutschland ist eines davon, die Bundesländer werden auch berücksichtigt
@Coder007 Ich habe beim letzten Versuch mit Wireshark und der GUI gearbeitet. Die GUI war nach einem Tag nicht mehr ansprechbar. Es hat aber weiterhin die Pakete aufgezeichnet. Nur beim abspielen meldete er dann das ein Problem mit dem File vorliegt.
@Chilic Ich habe den Service auf 2 Verschiedenen Servern installiert. Auch wenn ich den Socket Layer stoppe und wieder starte ohne den ganzen Prozess zu beenden dann läuft es auch wieder für eine Zeit weiter, verhängt sich dann aber schneller wieder als wenn ich den Prozess komplett beende.
@Weismat Ich werde es mal mit windump versuchen. Danke für den Tipp. Mal schauen ob ich hier bessere Files erzeugen kann.
Habe den Prozess nun an gestartet "WinDump.exe -C 200 -w traffic.pcap -s 0 -n port 53"
Generell noch ein mehr Informationen zum Projekt. Ich baue derzeit an einem Dns Server der auf TCP und UDP Anfragen antwortet. Das System läuft grundlegend schon sehr gut. Wie schon oben beschrieben fällt meistens der Nameserver1 nach einer bestimmten Zeit aus. Die Pakete habe ich auch schon ein wenig analysiert und teilweise kommen update Pakete die eigentlich nicht daher kommen sollten. Daher gehe ich schwer davon aus das eh mit korrupten Paketen zusammenhängt. Das Problem was ich dann aus den Logfiles entnehmen kann liegt mit dem senden der Antworten zusammen, da stellt es ihn irgendwo auf. Evtl. fälscht jemand die IP das möchte ich eben über ein Traffic Logfile herausfinden.
Grundsätzlich läuft der Dienst weiter kann aber keine Antworten mehr versenden. Ich habe einen Zähler eingebaut beim Senden der Antwort und dieser zählt dann ins unendliche hoch wenn der Fehler auftritt.
Testweise habe ich nun einen der beiden Services auf .NET 4.5 umgestellt. Der zweite läuft auf dem .NET 4.0 Framework.
Ich setze bei meinem Projekt für die untere Schicht auf ein bewährtes Socket Framework. Dieses verwende ich auch schon bei einem anderem Projekt. Dort läuft über Monate ohne Fehler. Der einzige unterschied im ersten Projekt verwende ich TCP beim neuen benötige ich UDP. Das Betriebssystem schließe ich aus, da nach einem Service Neustart alles wieder einwandfrei funktioniert.
Ich habe schon in einem Test 200 Millionen Request produziert und der Server lief einwandfrei. Ich gehe davon aus das korrupte UDP Pakete für den Fehler verwantwortlich sind. Ich muss aber diese Korrupten UDP Pakete zuerst identifizieren und möchte diese dann dem Entwickler zukommen lassen.
Danke für den netten Google Link. Ich poste hier im Forum um mit Menschen zu kommunizieren die schon vor der gleichen Herausforderung standen. Und einen besseren und vielleicht einfacheren Weg gefunden haben. Ich habe mich ja auch schon mit der Thematik auseinandergesetzt und mit Wireshark 2 Wochen den Traffic aufzunehmen und wieder abzuspielen scheint für mich nicht der optimale Weg zu sein.
Also wenn du wirklich helfen möchtest dann würde ich dich bitten Antworten zu verfassen die Hilfreich sind. Ansonsten kann ich gleich Google benutzen. Ich denke aber das Forum hier soll eine alternative zu Google darstellen.
Ich programmiere derzeit an einem UDP-Server in meiner Test Umgebung läuft alles einwandfrei sobald er aber im Live Betrieb läuft gibt er nach 50 bis 80 Millionen Request seinen dienst auf. Nun möchte ich mir den Traffic aufzeichnen damit ich ihn dann im Debug Modus analysieren kann.
Kennt jemand ein einfaches Tool dafür?
Bin bisher erst über wireshark und ostinato gestoßen. Wireshark scheint mir zu überdimensioniert für meinen Fall. Ostinato muss ich mir noch im Detail ansehen.
Ich erstelle gerade eine Funktion die Sonderzeichen rausfiltern soll. Es funktioniert einwandfrei. Nur ein spezielles Sonderzeichen "^" kommt immer durch wenn ich den Punkt hinzufüge mit "^\." an was kann das liegen?
ListUserData[i].Street = "Meine Straße^";
Regex regex = new Regex(@"[^a-z^0-9^ä^á^à^â^ã^ö^ó^ò^ô^ü^é^è^ë^í^ß^\-^\.]", RegexOptions.IgnoreCase);
if (regex.IsMatch(ListUserData[i].Street))
{
//gefunden
}
Den Button habe ich ins selbe Update Panel gelegt. Das Problem ist das die AJAX unterstützung für mein Control nicht funktioniert. Brauch ich vielleicht noch ein zusätzliches Interface?
Habe mir ein kleines Control gebaut das eine Bullet List erstellt wenn ich das ganze nun in ein Update Panel stecke funktioniert es nicht mit einem Button Control aus der Standart Pallete im selben Update Panel funktioniert es einwandfrei.
Mein Control
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Collections;
using System.Collections.Specialized;
using System.Web.UI.WebControls;
namespace NagerControls
{
public class BulletMenuEventArgs : EventArgs
{
public string Selected;
public BulletMenuEventArgs(string Selected)
{
this.Selected = Selected;
}
}
public class BulletMenu : Control, IPostBackDataHandler, IPostBackEventHandler
{
private string _selected = "";
public List<string> test = new List<string>();
public event EventHandler<BulletMenuEventArgs> OnClick;
public bool LoadPostData(string postDataKey, NameValueCollection values)
{
return true;
}
public void RaisePostDataChangedEvent()
{
//nothing
}
public void RaisePostBackEvent(string eventArgument)
{
if (OnClick != null)
{
OnClick(this, new BulletMenuEventArgs(eventArgument));
}
this._selected = eventArgument;
}
protected override void Render(HtmlTextWriter output)
{
ClientScriptManager clientscriptmanager = this.Page.ClientScript;
string style = "";
output.Write("<ul>");
for (int i = 0; i < test.Count; i++)
{
style = "";
if (test[i] == this._selected)
{
style = " style=\"font-weight:bold;\"";
}
output.Write("<li" + style + " onclick=\"" + clientscriptmanager.GetPostBackEventReference(this, test[i]) + "\"" + ">" + test[i] + "</li>");
}
output.Write("</ul>");
}
}
}
Default.aspx.cs
using System;
using System.Configuration;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using NagerControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<string> test = new List<string>();
test.Add("location1");
test.Add("location2");
test.Add("location3");
test.Add("location4");
test.Add("location5");
BulletMenu bulletmenu = new BulletMenu();
bulletmenu.test = test;
bulletmenu.OnClick += new EventHandler<BulletMenuEventArgs>(bulletmenu_OnClick);
Button button = new Button();
button.Text = "test";
button.Click += new EventHandler(button_Click);
this.Panel1.Controls.Add(bulletmenu);
this.Panel1.Controls.Add(button);
}
void button_Click(object sender, EventArgs e)
{
LiteralControl literalcontrol = new LiteralControl();
literalcontrol.Text = "test";
this.Panel2.Controls.Add(literalcontrol);
}
void bulletmenu_OnClick(object sender, BulletMenuEventArgs e)
{
LiteralControl literalcontrol = new LiteralControl();
literalcontrol.Text = e.Selected;
this.Panel2.Controls.Add(literalcontrol);
}
}
Danke für eure Antworten habe nun probiert das mal umzusetzen.
In DHCPAPI_PARAMS das hoffe ich ist nun richtig.
Aber den Teil im DHCPCAPI_PARAMS_ARRAY kapier ich nicht ganz wie übergebe ich dann das Array?
RecdParamsArray.Params = new DHCPCAPI_PARAMS[1];
RecdParamsArray.Params[0] = DhcpApiHostNameParams;
bekomme bei der jetztigen Version wieder den Fehler
[B]PInvokeStackImbalance wurde erkannt.[/B]
Ein Aufruf an die PInvoke-Funktion "WindowsApplication1!WindowsApplication1.Form1::DhcpRequestParams" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.
public const uint OPTION_HOST_NAME = 12;
public const byte DHCPCAPI_REQUEST_PERSISTENT = 0x01;
public const byte DHCPCAPI_REQUEST_SYNCHRONOUS = 0x02;
public const byte DHCPCAPI_REQUEST_ASYNCHRONOUS = 0x04;
public const byte DHCPCAPI_REQUEST_CANCEL = 0x08;
public const byte DHCPCAPI_REQUEST_MASK = 0x0F;
public struct DHCPCAPI_CLASSID
{
public uint Flags;
public byte Data;
public uint nBytesData;
}
public struct DHCPCAPI_PARAMS
{
public uint Flags;
public uint OptionId;
public bool IsVendor;
public IntPtr Data;
public uint nBytesData;
}
public struct DHCPCAPI_PARAMS_ARRAY
{
public long nParams;
public IntPtr Params;
}
[DllImport("Dhcpcsvc.dll")]
public static extern int DhcpRequestParams(byte Flags, IntPtr Reserved, [MarshalAs(UnmanagedType.LPWStr)] string AdapterName, ref DHCPCAPI_CLASSID ClassId, DHCPCAPI_PARAMS_ARRAY SendParams, ref DHCPCAPI_PARAMS_ARRAY RecdParams, byte[] Buffer, ref IntPtr pSize, [MarshalAs(UnmanagedType.LPWStr)] string RequestIdStr);
private void button1_Click(object sender, EventArgs e)
{
DHCPCAPI_PARAMS DhcpApiHostNameParams = new DHCPCAPI_PARAMS();
DhcpApiHostNameParams.Flags = 0;
DhcpApiHostNameParams.OptionId = OPTION_HOST_NAME;
DhcpApiHostNameParams.IsVendor = false;
DhcpApiHostNameParams.Data = IntPtr.Zero;
DhcpApiHostNameParams.nBytesData = 0;
DHCPCAPI_PARAMS_ARRAY SendParamsArray = new DHCPCAPI_PARAMS_ARRAY();
SendParamsArray.nParams = 0;
//SendParamsArray.Params = null;
SendParamsArray.Params = IntPtr.Zero;
DHCPCAPI_PARAMS_ARRAY RecdParamsArray = new DHCPCAPI_PARAMS_ARRAY();
RecdParamsArray.nParams = 1;
RecdParamsArray.Params = new IntPtr(1);
//RecdParamsArray.Params
IntPtr Reserved = IntPtr.Zero;
DHCPCAPI_CLASSID ClassId = new DHCPCAPI_CLASSID();
ClassId.Flags = 0;
ClassId.Data = new byte();
ClassId.nBytesData = 0;
IntPtr pSize = new IntPtr(1);
string AdapterName = "{EF2BB926-7ACB-4577-BA27-488FFD2EE4E3}";
//string AdapterName = "VMWare Accelerated AMD PCNet Adapter";
DhcpRequestParams(DHCPCAPI_REQUEST_SYNCHRONOUS, Reserved, AdapterName, ref ClassId, SendParamsArray, ref RecdParamsArray, null, ref pSize, "1");
Hallo Leute ich Versuche seit 2 Tagen vergeblich eine C++ komponente anzuprogrammieren.
Habe mein Script so weit fertig aber bekomme jetzt Fehler wie der folgenden...
Ein Aufruf an die PInvoke-Funktion "WindowsApplication1!WindowsApplication1.Form1::DhcpRequestParams" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.
Kennt sich jemand mit so sachen aus??
Würde gerne die Scope Option 66 Abfragen damit kann man den Boot Server den man am DHCP Server einstellt abfragen so weit ich das verstanden habe. Benötige diese Funktion um den optimalisten Software Server zur ermitteln.
Ich baue an einer Software die eine zusätzliche Funktion haben soll mit der man email auslesen kann das Funktioniert soweit schon alles Prima.
Das Problem das ich derzeit habe ist das noch nicht alle Office2003 verwenden deshalb möchte ich es nur einschalten wenn er auch die benötigten komponenten besitzt - das Problem ist aber das meine Setup Routine (die integrierte von VS2005 - Veröffentlichen) die installation nicht ausführt wenn die Primary Interop Assemblies nicht installiert sind.
mir geht es ja nicht darum die Sicherheit zu unterwandern ich möchte nur nicht überall das Passwort wieder hinterlegen müssen, zum beispiel bei wlan applikationen die tkip verwenden ist es ja auch möglich dem treiber zu sagen die windows zugangsdaten zu verwenden. Oder Proxy authentifiezierung in einem Windows Netzwerk das selbe möchte ich eben in meinem Programm nutzen.
Ich möchte in mein Programm die COM Komponente (Microsft Terminal Services) verbauen die im Visual Studio bereit gestellt wird. Bis jetzt habe ich immer direkt auf die mstsc.exe zugegriffen und im default.rdp das Passwort hinterlegt. Nun über die COM Komponente würde ich es geren auch so lösen das man das Passwort nicht nochmal eingeben muß (es soll das Windows Kennwort verwendet werden weil wir ja eh in einem Active Directory sind)!
Wie ist es möglich nun Automatisch das Passwort auszulesen mit dem sich der User angemeldet hat weil soweit ich das erkennen kann will die Komponente das Passwort im klartext...
Ziel des Projektes ist es ein Tool zu erstellen mit dem das Call Center dass nicht über Admin Rechte verfügt auch den Printer Spool leeren kann ohne das ich ihm die gewünschten Rechte hinterlegen muß. Die Benutzerkennung ist also im Programm verankert. Man kann dadurch auch eine Intranet Lösung anbieten, bei der man mit Protokolieren kann wenn jemand den Spool löscht zum Beispiel.
Ich würde mich für ein Tool intressieren mit dem Ich an einem Druckserver die Drucker Verwalten kann hab mich auch schon ein wenig durchgelesen aber leider ohne erfolg. EInes habe ich schon raus gefunden die Drucker auslesen kann ich per LDAP.
Meine Kriterien
1) Möchte in einer Datei oder direkt im Programm die Zugangsdaten hinterlegen weil man ja spezielle berechtigungen dazu beönigt.
2) Möchte schauen ob der Drucker noch erreichbar ist könnte man mit einem einfachen Ping wahrscheinlich herausfinden dazu muß ich aber auch die Schnitstelle an der der Drucker angeschlossen ist auslesen können.
3) Möchte dann von jedem Drucker auf dem Printserver den ganzen Spool löschen oder einzelne Aufträge.
Ist das möglich mit C# und wenn ja gibt es wo gute Anleitungen dies bezüglich?