2009-03-17 5 views
1

Ich möchte einen WCF-Dienst zum Testen auf der HTTP-Schicht aufrufen. Ich möchte keine Service-Referenz hinzufügen und einen Proxy erstellen und aufrufen. Ich möchte einen neuen Web-Test (VSTS) erstellen, der eine HTTP-Anfrage an den Dienst sendet und die Anfrage in http-Text als xml (Http-Post) sendet.WCF-Dienst wird aufgerufen - ohne Referenz hinzugefügt

Ich habe Service-Metadaten, mit denen ich die Datenkontrakte sehen kann, aber die wsdl: Operation hat nur den Namen der Operation, wsdl: Eingabe ist nur leer.

Auf der Contary, ein Asmx-Service wird die Soap-Anfrage in den Metadaten haben, die als HTTP-Anfrage Körper kopiert werden können, mit den Parametern ersetzt.

Wie man einen XML-Körper des WCF-Services von Grund auf neu erstellt, indem man nur die Service-Metadaten betrachtet (kein Zugang zu den Service-Logs), habe nur den Endpunkt.

Es ist so etwas wie

<root> 
<element1>element1</element1> 
<element2>element2</element2> 
</root> 

Aber, wie dies herauszufinden, hat Wurzel soetwas wie

<FunctionRequest xmlns=""http://schemas...."" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""> 

sein (für einen lokalen Service getestet und arbeitete)

Jetzt, ohne Zugriff auf Service-Protokolle (svctraceviewer Protokolle), nicht in der Lage, eine Service-Referenz hinzufügen, nicht in der Lage, svcutil.exe (zertifikatbasierter Service), nur mit Metadaten - wsdl, gibt es eine Möglichkeit, f die Anfrage aushändigen, die an den Service geschickt werden soll?

Antwort

0

Nun, Sie müssen Proxy erstellen - entweder statisch durch Hinzufügen einer Service-Referenz oder Ausführen von SVCutil auf Ihren Service-Metadaten, oder Sie können es dynamisch vollständig im Code erstellen, wenn Sie möchten.

In diesem Fall müssten Sie Ihren Servicevertrag (ISomethingService) zur Hand haben und das ChannelFactory < ISomethingService >() Konzept ausprobieren - das sollte Ihnen den Einstieg erleichtern.

Marc

0

Ja können Sie, aber Sie müssen sich zuerst ein wenig Arbeit zu tun.

Erstellen Sie den Dienstclient, indem Sie svcutil.exe in den Metadaten wsdl/xsd ausführen. Dies erzeugt eine C# mit Ihren Service- und Datenvertragsobjekten. Kompilieren Sie das zu einer Assembly, die csc.exe verwendet.

Sehen Sie den Soap-Umschlag body Sie können ein Anfrageobjekt erstellen und es manuell mit Data Contract Serializer serialisieren. Oder Sie können die Assembly unter WcfSvcHost.exe hosten und die Protokollierung von wcf der Konfigurationsdatei hinzufügen. In beiden Fällen haben Sie nur das richtige XML für den Hauptteil, und selbst das könnte falsch sein, wenn der echte Dienst den XML-Serializer anstelle des Daten-Contract-Serializers verwendet.

Der nächste Teil ist der schwierige Teil, weil Sie das Sicherheitsmodell für den echten Dienst kennen müssen. Wenn nur Zertifikate für die SSL- und Serveridentifikation verwendet werden, sollten Sie in der Lage sein, das XML über den WebClient zu senden. Aber wenn es gegenseitige Zertifikate und/oder Sicherheitstoken verwendet, müssen Sie ziemlich genau eine Channelfactory von Hand mit den richtigen Bindungen erstellen.

Verwandte Themen