web-dev-qa-db-fra.com

Méthode de service Web avec des paramètres facultatifs

Duplicata possible:
Puis-je avoir un paramètre facultatif pour un service Web ASP.NET SOAP Web

J'ai essayé de chercher cela, mais je ne peux vraiment pas trouver la bonne solution pour ce que je veux faire. Désolé pour la répétition car je sais que cela a déjà été demandé. J'ai une méthode de service Web dans laquelle je veux avoir un paramètre facultatif tel que:

public void MyMethod(int a, int b, int c = -3)

Je sais déjà que je ne peux pas utiliser de paramètres nullables, donc j'essaie simplement d'utiliser une valeur par défaut. Le problème est lorsque j'appelle cette méthode sans fournir d'argument c est toujours une exception. Y a-t-il un endroit où je dois préciser que c'est en fait facultatif?

Merci ...

25
Steve Kiss

Vous pouvez obtenir des paramètres facultatifs en surchargeant et en utilisant la propriété MessageName.

[WebMethod(MessageName = "MyMethodDefault")]
public void MyMethod(int a, int b)
{
      MyMethod( a, b, -3);
}

[WebMethod(MessageName = "MyMethod")]
public void MyMethod(int a, int b, int c)

Pour que cela fonctionne, vous devrez peut-être également modifier

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

à

[WebServiceBinding(ConformsTo = WsiProfiles.None)] 

si vous ne l'avez pas déjà fait, comme WS-I Basic Profile v1.1 ne permet pas les surcharges

26
Markis

Utilisez des méthodes de surcharge:

[WebMethod(MessageName = "MyMethod1")]
public void MyMethod(int a, int b)
{
    return MyMethod(a, b, -3);
}

[WebMethod(MessageName = "MyMethod2")]
public void MyMethod(int a, int b, int c)
{
}
10
abatishchev

J'ai déjà étudié les paramètres facultatifs, etc., et les services Web asmx directs ne le prennent pas en charge (avec les WSDL générés par défaut). Avec WCF cependant, vous pouvez marquer les paramètres de votre contrat de données comme IsRequired = false - voir Paramètres facultatifs dans le service Web ASP.NET

3
Chris Pont