Powershell: Fehler beim Verwenden von WCF-Diensten mit MTOM-Nachrichtencodierung

8

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
    
Tung 06.04.2011, 20:53
quelle

2 Antworten

4

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%     
Tung 04.04.2012, 22:09
quelle
0

Ich hatte ein ähnliches Problem. Allerdings habe ich den generierten Code von ClientBase bereits in eine lokale Assembly kompiliert.

Meine Lösung war:

%Vor%     
BozoJoe 11.05.2013 00:31
quelle

Tags und Links