2009-03-17 7 views
1

Je souhaite appeler un service wcf pour effectuer des tests sur la couche http. Je ne veux pas ajouter une référence de service et créer un proxy et invoquer. Je veux créer un nouveau test web (VSTS) qui envoie une requête http au service et publie (Http post) la requête dans le corps http en tant que xml.Service WCF invoquant - sans aucune référence ajoutée

J'ai des métadonnées de service, avec lesquelles je peux voir les contrats de données, mais l'opération wsdl: a seulement le nom d'opération, wsdl: l'entrée est juste vide. Sur le Contary, un service asmx aura la demande de savon dans les métadonnées qui peuvent être copiées en tant que corps de requête http, avec les paramètres remplacés. Comment construire un corps XML de service wcf à partir de zéro simplement en regardant les métadonnées de service (pas d'accès aux journaux de service aussi), ont juste le point final.

Il est quelque chose comme

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

Mais, comment savoir cela, la racine doit être quelque chose comme

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

(testé pour un service local et a travaillé)

Maintenant, sans avoir accès aux journaux de service (svctraceviewer logs), pas en mesure d'ajouter une référence de service, pas en mesure d'utiliser svcutil.exe (service basé sur certificat), juste avec des métadonnées - wsdl, y at-il un moyen de f ind out la demande qui doit être envoyée au service?

Répondre

0

Eh bien, vous devrez créer un proxy - soit statiquement en ajoutant une référence de service ou en lançant svcutil sur vos métadonnées de service, ou vous pouvez le construire dynamiquement en code, si vous le souhaitez.

Dans ce cas, vous devriez avoir votre contrat de service (ISomethingService) à portée de main, et découvrez le concept ChannelFactory < ISomethingService >() - qui devrait vous aider à démarrer.

Marc

0

Oui vous pouvez, mais vous devez faire un peu de travail d'abord.

Générez le client de service en exécutant svcutil.exe sur les métadonnées wsdl/xsd. Cela générera un C# avec vos objets de contrat de service et de données. Compilez cela à un assembly en utilisant csc.exe.

Voir l'enveloppe de savon corps Vous pouvez créer un objet de requête et le sérialiser manuellement avec le sérialiseur de contrat de données. Vous pouvez également héberger l'assembly au WcfSvcHost.exe et ajouter la journalisation wcf au fichier de configuration. Dans les deux cas vous n'aurez que le bon xml pour le corps, et même cela pourrait être faux si le vrai service utilise le sérialiseur xml au lieu du sérialiseur de contrat de données.

La partie suivante est la partie difficile car vous devez connaître le modèle de sécurité pour le service réel. S'il utilise uniquement des certificats pour SSL et l'identification du serveur, vous devriez pouvoir envoyer le fichier XML en utilisant WebClient. Mais si vous utilisez des certificats mutuels et/ou des jetons de sécurité, vous devez créer un channelfactory à la main avec les bonnes liaisons.