Can I have an optional parameter for an ASP.NET SOAP web service

后端 未结 6 2013
[愿得一人]
[愿得一人] 2020-11-29 12:30

I want to build a webservice with this signature, which does not throw an exception if param2 is left empty. Is this possible?

[WebMethod]
public string Hell         


        
相关标签:
6条回答
  • 2020-11-29 12:43

    You can not have overloaded Web Service methods. The SOAP protocol does not support it. Rasik's code is the workaround.

    0 讨论(0)
  • 2020-11-29 12:50

    I know this post is little old. But I think the method names should be same for the example from Rasik. If both method names are same, then where overloading comes there. I think it should be like this:

    [WebMethod(MessageName="Add3")]
    public double Add(double dValueOne, double dValueTwo, double dValueThree)
    {
       return dValueOne + dValueTwo + dValueThree;
    }
    
    [WebMethod(MessageName="Add2")]
    public int Add(double dValueOne, double dValueTwo)
    {
       return dValueOne + dValueTwo;
    }
    
    0 讨论(0)
  • 2020-11-29 12:51

    In accordance with MinOccurs Attribute Binding Support and Default Attribute Binding Support:

    1. Value type accompanied by a public bool field that uses the Specified naming convention described previously under Translating XSD to source - minOccurs value of output <element> element 0.

      [WebMethod]
      public SomeResult SomeMethod(bool optionalParam, [XmlIgnore] bool optionalParamSpecified)
      result:
      <s:element minOccurs="0" maxOccurs="1" name="optionalParam" type="s:boolean" />

    2. Value type with a default value specified via a System.Component.DefaultValueAttribute - minOccurs value of output <element> element 0. In the <element> element, the default value is also specified via the default XML attribute.

      [WebMethod]
      public SomeResult SomeMethod([DefaultValue(true)] bool optionalParam)
      result:
      <s:element minOccurs="0" maxOccurs="1" default="true" name="optionalParam" type="s:boolean" />

    0 讨论(0)
  • 2020-11-29 12:53

    Make all optional arguments strings. If no argument is passed, the input is treated as null.

    0 讨论(0)
  • 2020-11-29 12:54

    You can have a Overloaded Method in webservices with MessageName attribute. This is a workaround to achieve the overloading functionality.

    Look at http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx

    [WebMethod(MessageName="Add3")]
    public double Add(double dValueOne, double dValueTwo, double dValueThree)
    {
       return dValueOne + dValueTwo + dValueThree;
    }
    
    [WebMethod(MessageName="Add2")]
    public int Add(double dValueOne, double dValueTwo)
    {
       return dValueOne + dValueTwo;
    }
    

    The methods will be made visible as Add2 and Add3to the outside.

    0 讨论(0)
  • If you REALLY have to accomplish this, here's a sort of hack for the specific case of a web method that has only primitive types as parameters:

    [WebMethod]
    public void MyMethod(double requiredParam1, int requiredParam2)
    {
        // Grab an optional param from the request.
        string optionalParam1 = this.Context.Request["optionalParam1"];
    
        // Grab another optional param from the request, this time a double.
        double optionalParam2;
        double.TryParse(this.Context.Request["optionalParam2"], out optionalParam2);
        ...
    }
    
    0 讨论(0)
提交回复
热议问题