Ich untersuche derzeit Powershell-Funktionen, aber ich habe ein Problem festgestellt, das ich nicht lösen konnte. Alle schnellen Tipps würden sehr geschätzt =)
Mein Ziel: Rufen Sie Methoden von einem WCF-Dienst (konfiguriert mit MTOM-Nachrichtencodierung) aus Powershell v2.0 auf (hoffentlich mit dem neuen webserviceproxy-Cmdlet)
Mein Problem: Das Cmdlet new-webserviceproxy kann die Antwort des Dienstes nicht korrekt analysieren, wenn die Nachrichtencodierung auf Mtom festgelegt ist. Ich erhalte den folgenden Fehler:
PowerShell :
$proxyObject = New-WebServiceProxy -URI "http://myserver.com/AccessService.svc?wsdl"
$proxyObject.TestWebServiceConnection()
Ausnahme beim Aufruf von "TestWebServiceConnection" mit "0" Argument (en): "Client gefunden Response Inhaltstyp von 'multipart / related; type=" application / xop + xml "; start=" & amp; lthttp: //tempuri.org/0& ; gt "; Grenze=" Uuid:
4001d529-32b9-4560-9f4b-550c35c67b03 + id = 4 "; start-info=" text / xml "', erwartet aber' text / xml '.
Die Anfrage ist mit der Fehlermeldung fehlgeschlagen:
-
--uuid: 4001d529-32b9-4560-9f4b-550c35c67b03 + id = 4
Inhalts-ID: & amp; lthttp: //tempuri.org/0& gt
Inhalts-Transfer-Codierung: 8bit
Inhaltstyp: application / xop + xml; charset = utf-8; type="text / xml"
& amp; lts: Umschlag xmlns: s="http://schemas.xmlsoap.org/soap/envelope/" & amp; gt
& amp; lts: Körper & amp; gt
& amp; ltTestWebServiceConnectionResponse xmlns="http://myserver.com/" & amp; gt
& amp; ltTestWebServiceConnectionResult & amp; gtsuccess & amp; lt / TestWebServiceConnectionResult & amp; gt
& amp; lt / TestWebServiceConnectionResponse & amp; gt
& amp; lt / s: Körper & amp; gt
& amp; lt / s: Umschlag & amp; gt
--uuid: 4001d529-32b9-4560-9f4b-550c35c67b03 + id = 4--
-. "
Bei Zeile: 1 Zeichen: 38
+ $ proxyObject.TestWebServiceConnection & amp; lt & amp; lt & amp; lt & amp; lt & amp; gt & amp; gt error.txt
+ CategoryInfo: NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId: DotNetMethodException
Hinweis Ich kann den WCF-Dienst über andere Clients und sogar über das von Microsoft bereitgestellte Tool wcfclient verwenden. Sie können sehen, dass TestWebServiceConnectionResult Erfolg zurückgegeben hat, aber es scheint nicht so, als ob das Proxy-Objekt die Antwort analysieren könnte.
Verhalten :
& amp; ltserviceBehaviors & amp; gt
& amp; ltbehavior name="MyServiceBehavior" & amp; gt
& amp; ltserviceThrottling maxConcurrentCalls="100" maxConcurrentSessions="100" / & amp; gt
& amp; ltserviceMetadata httpGetEnabled="true" httpsGetEnabled="false" / & amp; gt
& amp; ltserviceDebug includeExceptionDetailInFaults="false" / & amp; gt
& amp; lt / Verhalten & amp; gt
& amp; lt / serviceBehaviors & amp; gt
Bindung (Ich habe die Timeout-Werte / Leserquote und Nachrichtengrößen ausgeschlossen, da die Permutationen ihrer Werte für mein Problem nicht relevant erscheinen):
& amp; ltbasicHttpBinding & amp; gt
& amp; ltbinding name="basicHttpEndpointBinding" messageEncoding="Mtom" & amp; gt
& amp; ltsicherheitsmodus="None" & amp; gt
& amp; lttransport clientCredentialType="Keine" / & amp; gt
& amp; lt / Sicherheit & amp; gt
& amp; lt / basicHttpBinding & amp; gt
Service
& amp; ltservice behaviorConfiguration="MyServiceBehavior" name="MyService.AccessService" & amp; gt
& amp; amendpoint Adresse="" binding="basicHttpBinding" bindingConfiguration="basicHttpEndpointBinding" Name="basicHttpEndpointAccessService" bindingNamespace="http://myserver.com/" contract="MyService.IAccessService" / & amp; gt
& amp; lendpoint address="mex" binding="basicHttpBinding" bindingConfiguration="basicHttpEndpointBinding" name="mexEndpointAccess" contract="IMetadataExchange" / & amp; gt
& amp; lt / service & amp; gt
Zum Zeitpunkt der Erstellung dieses Artikels konnte ich das Cmdlet New-WebServiceProxy
noch nicht erfolgreich mit einem WCF-Dienst mit aktiviertem MTOM verwenden. Es sieht nicht so aus, als ob das Cmdlet es unterstützt. Meine Problemumgehung umfasste das Ausführen von svcutil.exe
gegen die WSDL und dann das Kompilieren der Klasse in eine DLL mit csc.exe
. Ich habe dann die generierte Assembly in die PowerShell-Laufzeit geladen und dann den Endpunkt und die Bindung der Proxy-Klasse manuell konfiguriert:
Generieren der CS-Datei von Ihrem WSDL:
%Vor% Hinweis: svcutil.exe
und csc.exe
befinden sich möglicherweise nicht im PATH Ihrer Powershell. Sie können es entweder zu Ihrem PATH hinzufügen oder den vollständigen Pfad verwenden. Svcutil
kann in deinem Microsoft SDKs\Windows\<version>\bin
gefunden werden. csc.exe
befindet sich in Ihrem Ordner %windir%Microsoft .Net
Sobald Sie die .cs-Datei generiert haben, müssen Sie sie in eine DLL kompilieren:
%Vor%Laden Sie die kompilierte DLL in die Powershell:
%Vor%Instanziieren Sie den Proxy-Client in Powershell:
%Vor%Tags und Links wcf powershell mtom