Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Fabiano
Thema: UI-Thread-Code in DLL auslagern
Am im Forum: GUI: WPF und XAML

Hallo zusammen!

Wenn ich in einem Clickhandler eine async-Methode awaite, funktioniert das problemlos:

        private async void Knopf_Click(object sender, RoutedEventArgs e)
        {
            var id = "BluetoothLE#BluetoothLE12:34:56:78:90:12-12:34:56:78:90:12";
            var dev = await BluetoothLEDevice.FromIdAsync(id);                      // funktioniert
            //var dev = Creator.GetDevice(id, Application.Current.Dispatcher.Invoke); // funktioniert nicht
            Text.Text = dev.DeviceId;
        }

Der gleiche Code in einer Library funktionert aber nicht:

        public static BluetoothLEDevice GetDevice(string deviceId, Func<Func<Task>,Task> invoke)
        {
            BluetoothLEDevice ret = null;
            invoke(async () => {
                ret = await BluetoothLEDevice.FromIdAsync(deviceId);
            });
            return ret;
        }

Hier wird nicht wirklich awaitet, sondern ret bleibt null.
Wie kann ich durchsetzen, dass auf die Rückkehr von BluetoothLEDevice.FromIdAsync gewaitet wird?

Liebe Grüsse,
Fabiano

Thema: In Server Client-IP loggen und filtern
Am im Forum: Rund um die Programmierung

Ja, das erwarte ich von Enrich.WithClientIp(), dass das die Variable hinzufügt.
Wozu ist denn das sonst gut? Nur damit ich das versteh, mein ich. Will hier niemanden kritisiern, nur hat der Entwickler das genauso angegeben, ausser dass er das Output Template setzt, was bei mir ebenfalls nicht funktioniert...

Thema: In Server Client-IP loggen und filtern
Am im Forum: Rund um die Programmierung

Serilog schaut vielversprechend aus, aber ich kriege nicht einmal die Client IP geloggt. Ich habe:
1. Ein neues WebAPI-Projekt erstellt
2. Folgende Pakete installiert:
Serilog
Serilog.AspNetCore
Serilog.Enrichers.ClientInfo
Serilog.Sinks.Console
3. Folgende Dateien angepasst:
Program.cs

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Serilog;

namespace Tests.SerilogWeb
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder => {
                    webBuilder.UseStartup<Startup>();
                })
                .UseSerilog(new LoggerConfiguration() // Logger instanziern
                    .MinimumLevel.Debug()
                    .Enrich.WithClientIp()
                    .WriteTo.Console()
                    .CreateLogger()
                );
    }
}

Startup.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;
using Serilog;

namespace Tests.SerilogWeb
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "Tests.SerilogWeb", Version = "v1" });
            });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment()) {
                app
                    .UseDeveloperExceptionPage()
                    .UseSwagger()
                    .UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Tests.SerilogWeb v1"));
            }
            app
                .UseSerilogRequestLogging() // <- Hinzugefügt
                .UseHttpsRedirection()
                .UseRouting()
                .UseAuthorization()
                .UseEndpoints(endpoints => {
                    endpoints.MapControllers();
                });
        }
    }
}
WeatherForecastController.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;

namespace Tests.SerilogWeb.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            _logger.LogInformation("Hier sollte die ClientIp stehen: ->{ClientIp}<-");
            var rng = new Random();
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = rng.Next(-20, 55),
                Summary = Summaries[rng.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
}


Geloggt wird aber der String ohne Ersetzung der IP, also
Hier sollte die ClientIp stehen: ->{ClientIp}<-
statt z.B.
Hier sollte die ClientIp stehen: ->192.168.1.42<-

Hat hier jemand eine Idee?

Thema: In Server Client-IP loggen und filtern
Am im Forum: Rund um die Programmierung

Hallo zusammen!

Ich möchte in einem Server in Logmeldungen die Client-Ip mitloggen und analog zum LogLevel-Filter die Meldungen auf solche spezifischer Clients reduziern.
Also so wie ich das LogLevel von ERROR auf DEBUG stellen kann, möchte ich eine Liste von IPs konfiguriern, deren Logmeldungen geschrieben werden sollen, während alle anderen ignoriert werden.
Gibt es ein Loggingframework, das sowas bietet?

Vielen Dank für eure Antworten!

Thema: Bluetoothgeräte listen, ohne UWP
Am im Forum: Rund um die Programmierung

Sorry wegen dem .Result, das verwende ich in produktivem Code natürlich nicht!

Leider bringt dein Link nichts, weil die Klasse BluetoothComponent Legacy-Code ist (InTheHand.Net.Bluetooth statt InTheHand.Bluetooth).
Aber im Prinzip bräuchte ich genau sowas bei der LE-Library, die jedoch InTheHand.BluetoothLE heisst und nicht InTheHand.Bluetooth.
Weisst du da wie? Leider ist sein Code sehr chaotisch und ich steige nicht so durch.

Vielen Dank für deine Hilfe!

Thema: Bluetoothgeräte listen, ohne UWP
Am im Forum: Rund um die Programmierung

Hallo Abt!

Vielen Dank für deine Antwort! Es hat mir sehr geholfen, wenn auch indirekt.
Mein Problem war nämlich, dass ich die Methoden für Bluetooth <4 verwendet habe, es sich bei meinen Geräten aber um BluetoothLE (4+) Dinger handelt...
Dieser Code funktioniert soweit:

        static void Main(string[] args)
        {
            Console.WriteLine("Discovering...");
            var devices = InTheHand.Bluetooth.Bluetooth.ScanForDevicesAsync().Result;
            Console.WriteLine("Listing...");
            foreach (var device in devices) {
                Console.WriteLine($"\t{device.Name}");
            }
            Console.WriteLine("Finished.");
            Console.ReadKey();
        }

Jetzt möchte ich das Ganze aber noch awaiten und einen Handler jedes Gerät direkt nach den "Finden" in eine ObservableCollection hinzufügen.
Leider scheint Bluetooth.AdvertisementReceived dafür nicht vorgesehen zu sein (jedenfalls wird das Event nie ausgelöst) und ein anderes finde ich nicht.
Hast du irgendeine Idee?

Vielen Dank für deine Hilfe!

Gruss
Fabiano

Thema: Bluetoothgeräte listen, ohne UWP
Am im Forum: Rund um die Programmierung

Hallo Leute!

Ich möchte eine WPF-Applikation erstellen, in der alle BT-Geräte zur Auswahl angezeigt werden. Leider fliegt auf Google/StackOverflow viel verschiedener Code rum, und tatsächlich schlagen auch auf Anhieb beide von mir versuchten Ansätze fehl. Es werden keine BT-Geräte zurückgegeben, obwohl das Betriebssystem sehr wohl welche findet.

Der erste Versuch:

BTTests.ThirtyTwoFeetNET.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFrameworks>net48</TargetFrameworks>
    <UseWPF>true</UseWPF>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="32feet.NET" Version="3.5.0" />
  </ItemGroup>

</Project>
MainWindow.xaml.cs

using InTheHand.Net.Sockets;
using System.Windows;

namespace BTTests.ThirtyTwoFeetNET
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            using (var client = new BluetoothClient()) {
                foreach (var device in client.DiscoverDevicesInRange()) {
                    MessageBox.Show(device.DeviceName);
                }
            }
        }
    }
}

Und der zweite:

BTTests.MWSC.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFrameworks>net48</TargetFrameworks>
    <UseWPF>true</UseWPF>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Windows.SDK.Contracts" Version="10.0.19041.1" />
  </ItemGroup>

</Project>
MainWindow.xaml.cs

using System.Windows;
using Windows.Devices.Enumeration;

namespace BTTests.MWSC
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            var picker = new DevicePicker();
            picker.Show(new Windows.Foundation.Rect(Left, Top, Width, Height));
        }
    }
}

Hat hier jemand sowas am Laufen? Oder komme ich um eine UWP nicht herum?
UWP möchte ich eigentlich vermeiden, da ich bisher mit WPF arbeite.
Der Einfachheit halber habe ich auch noch die VS Solution angehängt.

Vielen Dank für eure Hilfe!

Thema: Roslyn: CSharpCompilation.Emit missachtet Referenzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich stecke wieder fest, und zwar erhalte ich beim Compiliern der Mapper folgende Fehler (Projekt Fipscode.ORM.Test):

Fehler
(9,49): error CS0234: The type or namespace name 'SloganMapper' does not exist in the namespace 'Fipscode.ORM.Dapper.Fipscode.Entities.Test' (are you missing an assembly reference?)
(10,13): error CS0012: The type 'User' is defined in an assembly that is not referenced. You must add a reference to assembly 'Fipscode.Entities.Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
Könntet ihr euch das vielleicht nochmal ansehen?
Der zu kompilierende Sourcecode wird auch ausgegeben, zum besseren Verständnis.

Thema: Lan Scanner simulieren
Am im Forum: Netzwerktechnologien

Lass mich raten: Du meinst Portscanner und willst per TCP herausfinden, welche IP das "Programm" bekommen hat, bzw auf welchem lokalen Port es lauscht?
Dazu böte sich System.Net.Sockets.TcpClient an.
Aber vielleicht erklärst du mal genauer, was du vorhast?

Thema: Roslyn: CSharpCompilation.Emit missachtet Referenzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo jogibear9988

Diese 2 Zeilen von dir haben meinen Tag gerettet! Ach was, die ganze Woche!

                MetadataReference.CreateFromFile(Assembly.Load("netstandard").Location),
                MetadataReference.CreateFromFile(Assembly.Load("System.Runtime").Location)

Nochmals vielen Dank euch beiden, dass ihr euch gekümmert habt! Einen wunderschönen Abend!

Gruss,
Fabiano

Thema: Roslyn: CSharpCompilation.Emit missachtet Referenzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo gfoidl

Vielen Dank für deine Unterstützung!
Es geht mir nicht um das CodeGenerator-Projekt, sondern um ORM.Test.
Die Solution kompiliert bei mir auch, aber wenn ich das ORM.Test-Projekt ausführe, kommen diese Fehler:

Fehler
(5,32): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
(9,13): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
(9,13): error CS0012: The type 'Expression<>' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
(9,30): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
(10,13): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
(10,13): error CS0012: The type 'Expression<>' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
(10,33): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
Klappt das bei dir?

Ich möchte wie gesagt auch keinen Source generieren, sondern fertige Typen.

Gruss,
Fabiano

Thema: Roslyn: CSharpCompilation.Emit missachtet Referenzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Vielen Dank für deine Antwort!

Leider hat das auch keinen Einfluss. Das CLI ist (natürlich) netcoreapp3.1, aber der ganze Rest netstandard2.0.
Könntest du dir das kurz anschauen? So wie ich mich kenne, liegt es an was ganz Blödem...

Gruss,
Fabiano

Thema: Roslyn: CSharpCompilation.Emit missachtet Referenzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Vielen Dank für deine schnelle Antwort!

Der Typ soll natürlich zur Laufzeit generiert werden, generierter Source oder gar eine Installation von VS kann ich nicht voraussetzen.
Im Prinzip hätt ich auch per System.Reflection.Emit.GetILGenerator direkt Bytecode erzeugen können, aber das ist mir zu hoch!

Thema: Roslyn: CSharpCompilation.Emit missachtet Referenzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Leute!

Visual Studio 2019, 16.9.4
Microsoft.CodeAnalysis.CSharp 3.9.0

Ich möchte Dapper ORM-Mappings dynamisch erstellen und verwende dazu folgenden Code:


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.Emit;
using DFM = Dapper.FluentMap.Mapping;

namespace Fips.ORM.Dapper
{
    public class MappersCreator
    {
        private Type CreateType(Type type, string name, Dictionary<string,string> mappings)
        {
            var assemblyName = type.Assembly.FullName;
            var nspace = type.Namespace;
            var sb = new StringBuilder();
            foreach (var kv in mappings) {
                sb.Append($"            Map(m => m.{kv.Key}).ToColumn(\"{kv.Value}\");\n");
            }
            var code = [email protected]"using Dapper.FluentMap.Mapping;

namespace {nspace}
{{
    public class {name}Mapper : EntityMap<{name}>
    {{
        public {name}Mapper()
        {{
{sb.ToString()}
        }}
    }}
}}";
            SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(code);
            CSharpCompilation compilation = CSharpCompilation.Create(
                assemblyName,
                new[] { syntaxTree },
                new MetadataReference[] {
                    MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
                    MetadataReference.CreateFromFile(type.Assembly.Location),
                    MetadataReference.CreateFromFile(typeof(DFM.EntityMap<Type>).Assembly.Location),
                    MetadataReference.CreateFromFile(typeof(Expression<Type>).Assembly.Location),
                    MetadataReference.CreateFromFile(typeof(Enumerable).Assembly.Location),
                },
                new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)
            );
            using (var memoryStream = new MemoryStream()) {
                EmitResult result = compilation.Emit(memoryStream);
                if (result.Success) {
                    memoryStream.Seek(0, SeekOrigin.Begin);
                    Assembly assembly = Assembly.Load(memoryStream.ToArray());
                    Type ret = assembly.GetType($"{nspace}.{name}");
                    return ret;
                } else {
                    foreach (var diagnostic in result.Diagnostics) {
                        Console.WriteLine(diagnostic);
                    }
                    return null;
                }
            }
        }
    }
}

Leider kriege ich nur folgende Fehler bei compilation.Emit(memoryStream) auf Zeile 51:
Fehler
(5,32): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
(9,13): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
(9,13): error CS0012: The type 'Expression<>' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
(9,30): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
(10,13): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
(10,13): error CS0012: The type 'Expression<>' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
(10,33): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.

Das ist mein CSPROJ-File:
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Dapper" Version="2.0.78" />
    <PackageReference Include="Dapper.FluentMap" Version="2.0.0" />
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.9.0" />
  </ItemGroup>

  <ItemGroup>
    <Reference Include="System.Linq" />
    <Reference Include="System.Linq.Expressions" />
    <Reference Include="netstandard" />
  </ItemGroup>
</Project>

Warum werden meine Referenzenangaben auf den Zeilen 42 und 45 (scheinbar) einfach ignoriert? Oder was ist sonst der Fehler?

Liebe Grüsse,
Fabiano

Thema: Mit ActiveDirectory verbinden von ausserhalb der Domäne
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zum Nachtrag: Es lag dann schlussendlich doch an einem ungültigen Zertifikat.

Thema: Mit ActiveDirectory verbinden von ausserhalb der Domäne
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Klappt auch nicht, dann kommt nur ein System.Runtime.InteropServices.COMException: 'Unknown error (0x80005000)' an der gleichen Stelle.

Thema: Mit ActiveDirectory verbinden von ausserhalb der Domäne
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hier noch das zweite Bild

Thema: Mit ActiveDirectory verbinden von ausserhalb der Domäne
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ah, tut mir leid wegen der Bilder, hab sie nun angehängt.

Hab nun AuthenticationTypes.SecureSocketsLayer in AuthenticationTypes.Encryption geändert und bekomme immer noch die gleiche Exception geschmissen. Aber gemäss AuthenticationTypes Enum hat der Enum-Member ohnehin den gleichen Wert?

Thema: Mit ActiveDirectory verbinden von ausserhalb der Domäne
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo Abt! Vielen Dank für deine schnelle Antwort!

Ich muss per LDAPS auf das Directory zugreifen, auch von ausserhalb der Domäne.
Kerberos ist dafür offensichtilich nicht notwendig, da es mit Apache Directory Studio ebenfalls geht (ohne Kerberos)

Thema: Mit ActiveDirectory verbinden von ausserhalb der Domäne
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo zusammen!

Hab kein AD-spezifisches Subforum gefunden und poste daher hier.
Folgendes C#-Programm funktioniert wie erwartet, wenn es auf dem DC oder einem Member Server ausgeführt wird:

using System;
using System.DirectoryServices;

namespace Tests.LDAP {
    class Program {
        static void Main(string[] args) {
            var server = "dc.domain.example.com";
            var port = 636;
            var container = "CN=Users,DC=domain,DC=example,DC=com";
            var path = $"LDAP://{server}:{port}/{{0}}{container}";
            var user = "[email protected]";
            var password = "s0m3p4ssw0rd";
            var de = new DirectoryEntry(string.Format(path, "CN=User Name,"), user, password, AuthenticationTypes.SecureSocketsLayer);
            var prop = de.Properties["cn"]; // <-- Hier wird die Exception geworfen
            Console.WriteLine($"cn: {prop}");
            Console.ReadKey();
        }
    }
}

Wenn ich das Programm aber ausserhalb der Domäne laufen lasse, wird folgende Exception geworfen:

Unhandled Exception: System.Runtime.InteropServices.COMException: The server is not operational.
   at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
   at System.DirectoryServices.DirectoryEntry.Bind()
   at System.DirectoryServices.DirectoryEntry.get_AdsObject()
   at System.DirectoryServices.PropertyValueCollection.PopulateList()
   at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
   at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
   at Tests.LDAP.Program.Main(String[] args) in C:\source\Tests\Tests.LDAP\Program.cs:line 17

Wenn ich mit Apache Directory Studio mit folgenden Einstellungen verbinde, funktioniert alles problemlos:
Edit Abt: Bilder-Links entfernt.

Es muss sich also um ein Library- oder ein API-Benutzungsproblem handeln.
Hat hier jemand einen Tipp, wie ich das zum Laufen bekommen kann?