2009-10-19 5 views
3

Est-il inhabituel pour un appel de service Web d'avoir un paramètre "out"? Si oui, pourquoi? J'utilise le service web C# et le client webserive sera aussi l'application C#.Est-il inhabituel pour un appel de service Web d'avoir un paramètre "out"?

+2

Les services Web n'ont pas de «paramètres de sortie», ni de paramètres en tant que tels. Même plus spécifiquement pour les services Web SOAP (qui ne sont pas les seuls), vous avez des requêtes et des réponses XML. Certaines parties de la réponse XML peuvent être mappées sur des out-paramètres sur certaines plates-formes, mais il est difficile d'être plus précis à moins que vous fournissiez plus de détails pour votre environnement. –

Répondre

6

Oui, car un service Web doit être considéré comme prenant un message (requête) et crachant un résultat (sortie). Un paramètre 'out' indiquerait que vous voulez renvoyer une version modifiée du message de requête d'origine ... ce qui n'a vraiment aucun sens. Si vous avez besoin de plusieurs sorties, vous devez réfléchir à la façon de regrouper ces valeurs dans un seul message de réponse.

1

Oui, vous voulez regrouper ce que vous revenez en un seul objet (généralement un objet de réponse)

Voir Wikipedia

12

Si vous faites référence à des paramètres au niveau C# dans un ASP.Net service web, je ne pense pas que ce soit inhabituel du tout. Vos paramètres out deviendront simplement des éléments enfants de l'élément de réponse. Voici un service Web court exemple avec une méthode Web unique qui a des paramètres:

[WebService(Namespace = "http://begen.name/xml/namespace/2009/10/samplewebservicev1")] 
public class SampleWebServiceV1 : WebService 
{ 
    [WebMethod] 
    public void 
    WebMethodWithOutParameters(out string OutParam1, out string OutParam2) 
    { 
     OutParam1 = "Hello"; 
     OutParam2 = "Web!"; 
    } 
} 

Avec la méthode Web ci-dessus, la requête SOAP ressemble à ceci:

POST /SampleWebServiceV1.asmx HTTP/1.1 
Host: localhost 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 
SOAPAction: "http://begen.name/xml/namespace/2009/10/samplewebservicev1/WebMethodWithOutParameters" 

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <WebMethodWithOutParameters xmlns="http://begen.name/xml/namespace/2009/10/samplewebservicev1" /> 
    </soap:Body> 
</soap:Envelope> 

Et la réponse ressemble à ceci:

HTTP/1.1 200 OK 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <WebMethodWithOutParametersResponse xmlns="http://begen.name/xml/namespace/2009/10/samplewebservicev1"> 
     <OutParam1>Hello</OutParam1> 
     <OutParam2>Web!</OutParam2> 
    </WebMethodWithOutParametersResponse> 
    </soap:Body> 
</soap:Envelope> 

note: cela ne remet pas en cause les autres réponses à cette question, car ils étaient tous considérer cela du niveau de service Web, pas le niveau C#.

Questions connexes