79 votes

Client SOAP en .NET - références ou exemples?

Arrière-plan:

Je suis entrain de créer un webservices site qui permettra de fournir de nombreux types de services simples sur le SAVON et peut-être d'autres protocoles de trop. L'objectif est de le rendre facile à faire, par exemple, des conversions, des flux RSS de l'analyse, des vérifications de spam et de nombreux autres types de travail. Le site sera ciblée principalement au débutant développeurs.

Mon Problème:

Je n'ai jamais développé en C#, ou .NET pour cette question. Je n'ai hack certains VB6 il y a plusieurs années mais c'est tout. Maintenant j'ai besoin de quelques exemples de faire des appels RPC sur SOAP en C#. J'ai essayé de rechercher sur le web, et un Débordement de Pile à trouver cela, mais n'ai pas trouvé beaucoup de ressources, et je n'ai aucune idée de la façon de classer les ressources (qui sont vieux? qui sont incorrectes? etc.).

J'ai créé un exemple simple service, qui est appelé comme ça en PHP:

<?php
$client = new SoapClient('http://webservi.se/year'); //URL to the WSDL
echo $client->getCurrentYear(); //This method returns an integer, called "year"
?>

Je vais maintenant appeler cette méthode aussi facilement que possible en C#. Toutes les références et les exemples sont les bienvenus. Où dois-je commencer? Les classes/modules/ce que je peux utiliser?

La solution ne doit pas impliquer de SAVON à tous si il y a de meilleures infrastructures de communication (la fin est conçu pour être extensible), mais notez que le côté serveur est implémenté en PHP sur Unix donc des solutions propriétaires de Microsoft sont hors de question, sur le côté serveur.

Note que j'en ai besoin donc je peux écrire de la documentation possible pour J. Aléatoire Développeur Web à suivre (même si ils sont sur d'hébergement web partagé). Par conséquent, je pense que la meilleure approche devrait être de le faire dans le code, mais même d'autres façons de faire, ce sont bien sûr les bienvenus.

155voto

Davita Points 3702

Comme je comprends que vous souhaitez appeler votre service web en C# client de l'application. Vous avez déjà le service et publié fichier WSDL (corrigez-moi si je me trompe). Maintenant, le plus simple est de générer des classes proxy en application en C# (ce processus est appelé ajouter une référence de service). Il y a 2 façon de faire cela, .NET propose ASP.NET les services, qui est l'ancienne façon de faire de la SOA, et WCF comme Jean l'a suggéré, qui est le dernier cadre de MS et fournit de nombreux protocoles, y compris l'ouverture et MS proprietery ceux.

Maintenant, assez de théorie et vous permet de faire étape par étape

  1. Ouvrez votre projet (ou en créer un nouveau) dans visual studio
  2. Clic droit sur le projet (sur le projet et non pas la solution) dans l'Explorateur de solutions, puis cliquez sur Ajouter une Référence de Service
  3. Une boîte de dialogue devrait apparaître montré dans la capture d'écran ci-dessous. Entrez l'url de votre fichier wsdl et cliquez sur Ok. Notez que si vous recevez message d'erreur après avoir cliquer sur ok, essayez de les retirer ?wsdl partie à partir de l'url. screen

  4. Développez des Références de Service dans l'Explorateur de solutions et double-cliquez sur ServiceReference1 (le nom peut varier). Vous devriez voir le proxy généré nom de la classe et de l'espace de noms. Dans mon cas, l'espace est WindowsFormsApplication1.ServiceReference1, le nom de la classe proxy est Service1Client. Comme je l'ai dit ci-dessus, les noms de classe peuvent varier dans votre cas. enter image description here

  5. Allez dans votre code source en C#. Ajouter using WindowsFormsApplication1.ServiceReference1.

  6. Maintenant, vous pouvez appeler le service de cette façon.

Service1Client service = new Service1Client();

int year = service.getCurrentYear();

Espérons que cela aide, si vous rencontrez un quelconque problème, laissez-nous savoir.

25voto

mtutty Points 343

J'ai fait un peu de quoi vous parlez, de SAVON et d'interopérabilité entre les plates-formes a une règle essentielle: PREMIER CONTRAT. Ne pas tirer de votre WSDL à partir du code, puis essayez de générer un client sur une autre plate-forme. Rien de plus que "Bonjour le Monde" type de fonctions seront très probablement ne parviennent pas à générer le code, ne parviennent pas à en parler lors de l'exécution ou (mon préféré) ne parviennent pas à envoyer ou recevoir toutes les données sans générer une erreur.

Cela dit, WSDL est compliqué, les choses désagréables, et j'évite de l'écrire à partir de zéro chaque fois que possible. Voici quelques lignes directrices pour la fiabilité de l'interopérabilité des services (à l'aide de Références Web, WCF, Axis2/Java, WS02, Ruby, Python, peu importe):

  • Aller de l'avant et faire de code-première à créer votre premier fichier WSDL. Ensuite, supprimez votre code et re-générer la classe serveur(es) à partir du WSDL. Presque chaque plate-forme dispose d'un outil pour cela. Cela va vous montrer ce que bizarre habitudes de votre plate-forme a, et vous pouvez commencer à peaufiner le WSDL pour être plus simple et plus facile. Le Tweak, re-gen, répétez. Vous apprendrez beaucoup de choses de cette façon, et il est portable connaissances.
  • Bâton à la plaine de vieux cours de langue (POCO, POJO, etc.) pour les types complexes. Ne PAS utiliser une plate-forme spécifique des constructions telles que la Liste des<> ou DataTable. Même PHP tableaux associatifs apparaissent au travail mais ne parviennent pas dans les moyens qui sont difficiles à déboguer à travers les plates-formes.
  • Bâton de types de données de base: bool, int, float, string, date(Time), et les tableaux. Les chances sont, le plus particulier, vous obtenez sur un type de données, moins agile, vous serez à de nouvelles exigences au fil du temps. Vous ne voulez PAS changer votre WSDL si vous pouvez l'éviter.
  • Une exception pour les types de données ci-dessus - vous donner un NameValuePair mécanisme d'une certaine sorte. Vous ne croiriez pas combien de fois une liste de ces choses permettra d'économiser votre bacon en termes de flexibilité.
  • Mettre un véritable espace de noms pour votre WSDL. Il n'est pas difficile, mais vous pourriez ne pas croire à quel point beaucoup de services web que j'ai vu en l'espace de noms "http://www.tempuri.org". Aussi, l'utilisation d'une URNE ("urn:com-myweb-servicename-v1", et non pas l'URL de l'espace de noms ("http://servicename.myweb.com/v1". Ce n'est pas un site web, c'est un jeu abstrait de caractères qui définit un regroupement logique. J'ai sans doute eu une douzaine de personnes m'appellent pour le soutien et disent qu'ils sont allés au "site web" et ça ne fonctionne pas.

</rant> :)

7voto

Jorge Córdoba Points 18919

Jetez un oeil à "à l'aide des Services WCF avec PHP". Il explique les bases de ce que vous avez besoin.

Comme une théorie résumé:

WCF ou Windows Communication Foundation est une technologie qui permet de définir les services abstraite de la communication sous-jacente de la méthode qui sera invoquée.

L'idée est que vous définissez un contrat sur ce que fait le service et ce que l'offre de services et également de définir un autre contrat sur la méthode de communication est utilisé pour consommer le service, que ce soit TCP, HTTP ou SOAP.

Vous avez de la première partie de l'article ici, en expliquant comment créer un très de base de Service WCF.

Plus de ressources:

En utilisant WCF avec PHP5.

Aussi, jetez un oeil à NuSOAP. Maintenant, si vous NuSphere c'est une boîte à outils pour vous permettre de vous connecter à partir de PHP pour un service WCF.

7voto

Rob A Points 1575

Si vous pouvez le faire fonctionner dans un navigateur, alors quelque chose d'aussi simple que cela fonctionnerait

 var webRequest = WebRequest.Create(@"http://webservi.se/year/getCurrentYear");

using (var response = webRequest.GetResponse())
{
    using (var rd = new StreamReader(response.GetResponseStream()))
    {
        var soapResult = rd.ReadToEnd();
    }
}
 

6voto

John Saunders Points 118808

Vous regardez au mauvais endroit. Vous devriez rechercher Windows Communication Framework .


WCF est utilisé à la fois sur le client et sur le serveur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X