You can achieve optional parameters by overloads and using the MessageName property.
[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)
For this to work, you may also need to change
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
to
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
if you haven't done so already, as WS-I Basic Profile v1.1
does not allow overloads