Question

Existe-t-il un moyen lors de la création de services Web de spécifier les types à utiliser? Plus précisément, je souhaite pouvoir utiliser le même type à la fois sur le client et sur le serveur afin de réduire la duplication de code.

Exemple simplifié:

    public class Name
    {
        public string FirstName {get; set;}
        public string Surname { get; set; }

        public override string ToString()
        {
            return string.Concat(FirstName, " ", Surname);
        }
    }

Je ne veux pas avoir de recodage de fonctionnalités dans ma classe. L’autre chose est que tout code existant manipulant cette classe ne fonctionnera pas côté client car la classe côté client générée serait d’un type différent.

Était-ce utile?

La solution

D'accord, je vois que c'est une décision de conception explicite de la part de SOAP, donc vous n'êtes pas censé le faire J'ai trouvé la page suivante qui explique pourquoi:

  

Schéma et contrat de partage de services,   pas classe . Les services interagissent uniquement sur   leur expression de structures à travers   schémas et comportements à travers   contrats. Le contrat de service   décrit la structure des messages   et des contraintes de commande sur   messages. La formalité de la   expression permet la vérification de la machine   des messages entrants. Machine   vérification des messages entrants   vous permet de protéger le service   intégrité. Les contrats et les schémas doivent   rester stable dans le temps, construisant ainsi   leur flexibilité est important.

Cela dit, il existe deux autres possibilités:

  1. Générez les références Web dans Visual Studio ou à l'aide de wsdl.exe. Ensuite, allez dans le fichier Reference.cs (ou .vb) généré et supprimez le type explicitement. Puis redirigez vers le type souhaité situé dans un autre assemblage.
  2. Vous pouvez partager des types entre des services Web côté client avec wsdl.exe et le paramètre / sharetypes.

Autres conseils

Si vous souhaitez partager un type ou une structure entre votre service Web et votre client, ajoutez une structure publique à votre projet de service Web, comme suit:

public struct Whatever
{
    public string A;
    public int B;
}

ajoutez ensuite une méthode à votre service Web dont le type de retour est cette structure:

[WebMethod]
public Whatever GiveMeWhatever()
{
    Whatever what = new Whatever();
    what.A = "A";
    what.B = 42;
    return what;
}

Après avoir mis à jour la référence Web de votre client, vous serez en mesure de créer des structures de type Quoi que ce soit dans votre application client, de la manière suivante:

Webreference.Whatever what = new Webreference.Whatever();
what.A = "that works?";
what.B = -1; // FILENOTFOUND

Cette technique vous permet de conserver la définition de toutes les structures que vous devez faire passer en un endroit (projet de service Web).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top