Wie verwende ich einen benutzerdefinierten WCF-Proxy in einem Powershell-Skript mit einer Konfigurationsdatei?

8

Ich habe einen handgeschriebenen WCF-Proxy in seiner eigenen Assembly, es ist sehr einfach:

%Vor%

Ich lade dies in ein Powershell-Skript:

%Vor%

Ich versuche dann, die App.config (nach ) zu setzen andere Posts zu SO), damit der Client mit einem Endpoint instanziiert werden kann, der in config und nicht im Skript selbst definiert ist:

%Vor%

Ich habe die AppDomain überprüft und die Konfigurationsdatei wird als ConfigurationFile -Eigenschaft festgelegt.

Wenn ich eine Instanz des Clients erstelle:

%Vor%

Es fällt um zu sagen:

Exception calling ".ctor" with "1" argument(s): "Could not find endpoint element with name 'MyServiceHttpEndpoint' and contract 'MyService.Contracts.IMyService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this name could be found in the client element."

Irgendwelche Ideen? Ich möchte den Endpunkt nicht manuell in der Skriptdatei erstellen - er muss aus der Konfiguration gelesen werden.

    
jimmy_terra 14.03.2013, 16:29
quelle

5 Antworten

0

Sind Ihre Baugruppen als 32-Bit- oder 64-Bit-Ziel erstellt?

Ich habe das 32/64 Problem in mehreren Fällen gefunden.

Seien Sie vorsichtig, wenn Sie ein 64-Bit-Betriebssystem verwenden, haben Sie zwei PowerShells mit 64 Bit (gewöhnlich) und 32 Bit (interessant, wenn Sie 32 externe Assemblys benötigen).

    
JPBlanc 20.03.2013 04:31
quelle
0

Es wäre einfacher, wenn Sie Ihre komplette Konfiguration gepostet hätten, aber es klingt, als ob Ihnen der folgende Abschnitt fehlt.

%Vor%

Obwohl Sie ziemlich sicher klingen, ist das nicht der Fall.

Versuchen wir also, sicherzustellen, dass Ihre Powershell-App die Konfiguration korrekt aufnimmt ...

Um sicher zu sein, dass die Powershell-App die Konfiguration wie erwartet übernimmt, fügen Sie Ihrer Powershell-Datei so etwas hinzu:

%Vor%

Wenn es dann kein Config-Problem ist, dann können wir uns meiner Meinung nach darauf einigen.

Also kann die dll die Einstellungen in der Config sehen? Inzwischen wissen wir, dass Powershell die Konfiguration sehen und Ihre DLL aufrufen kann.

Ist die Konfiguration am selben Ort wie die DLL?

Macht Add-Type etwas, was wir nicht erwarten? Mit Blick auf die msdn docs sieht es aus wie add-type

  

Fügt einer Windows PowerShell einen Microsoft .NET Framework-Typ (eine Klasse) hinzu   Sitzung.

Wenn die Klasse jetzt in einer Powershell-Sitzung ist, hat sie Zugriff auf die Konfiguration, so wie sie es normalerweise tun würde? Ich weiß es nicht.

Vielleicht probiere [Reflection.Assembly]::LoadFrom eher und add-type , um zu sehen, ob das einen Unterschied macht?

Ich habe keine genaue Antwort, aber ich hoffe, dass mein Geschwafel etwas hilfreich ist.

    
David McLean 21.03.2013 00:32
quelle
0

Scheint so, als ob Ihnen die Art der Bindung fehlt, es sollte basicHttpBinding sein, wenn Sie in der Powershell sind

Lassen Sie Ihren Code wie folgt aussehen:

%Vor%     
Nirav 25.03.2013 13:45
quelle
0

Es scheint einen Unterschied in der Art und Weise zu geben, wie Powershell und Powershell ISE damit umgehen.

Mit ISE (mindestens die Version, die ich benutze) müssen Sie die Konfiguration löschen, um das Neuladen zu erzwingen. Allerdings könnten Sie den Inhalt Ihrer .dll.config-Datei auch in die Powershell-ISE-Konfiguration einfügen. Das scheint jedoch eklig zu sein. Der unten angegebene Code funktioniert. Ich habe Teile davon gefunden, die dieses Thema googlen.

%Vor%     
Steve L 25.11.2015 21:51
quelle
0

Ich würde vorschlagen, die Konfigurationsdatei alle zusammen zu überspringen, wenn möglich. Wenn Ihre API einen MEX- oder WSDL-Endpunkt bereitstellt, versuchen Sie, Ihre Proxies zu erstellen, indem Sie sie abfragen, und verwenden Sie WsdlImporter , um die Bindungskonfiguration im Speicher aufzubauen. Von diesem Zeitpunkt an können Sie es bei Bedarf im Speicher ändern.

Dies ist, was ich für das Projekt mache, an dem ich arbeite, das einen sehr großen Konfigurations-WCF-Dienst hat, weil es in einen Sicherheitstokendienst mit WS-Trust integriert ist.

Für eine ähnliche Frage habe ich vorgeschlagen, das WcfPS Modul in der Galerie verfügbar. Da es eine Überschneidung mit der anderen Frage gibt, werde ich einen Teil davon zitieren.

  

Der Code für das Modul ist Open Source und obwohl es im Skript ist, hängt es stark von .net Framework Klassen und Assemblies ab System.ServiceModel und System.IdentityModel Baugruppen. Ich erwähne dies, weil die meisten Apis in diesen Assemblys nicht von .NET Standard 2 verfügbar sind, so dass das Modul leider nicht mit Windows-Betriebssystemen funktioniert. Sie können auch mehr darüber in meinem Beitrag WCFPS - PowerShell-Modul lesen, um mit SOAP zu arbeiten Endpunkte .

Dies ist das Beispiel aus der README

%Vor%

Mit dieser Methode benötigen Sie keinen Import von Inline-.NET-Typen, weder die Proxies, die Sie in Visual Studio verwenden, noch eine Konfiguration. Wahrscheinlich müssen Sie es an Ihren Anwendungsfall anpassen. Wenn Sie die Funktionalität des Moduls verbessern können, senden Sie bitte eine Pull-Anfrage.

    
Alex Sarafian 03.10.2017 07:42
quelle