views:

328

answers:

2

I have two classes, WebServiceRequest and OrderRequest. Each class has properties. OrderRequest inherits from WebServiceRequest - like so:

    public class WebServiceRequest
    {
     private string mAuthenticationToken;

     public string AuthenticationToken
     {
      get { return mAuthenticationToken; }
      set { mAuthenticationToken = value; }
     }
     ...
}


public class OrderRequest : WebServiceRequest
{

 private string mVendorId;
 public string VendorId
 {
  get { return mVendorId; }
  set { mVendorId = value; }
 }
 ...
}

OrderRequest is exposed via a WebMethod. When viewing the WSDL of the ASMX file that exposes OrderRequest (i.e. MyWebService.asmx?WSDL), both properties are visible - as they should be. However, when you view the SOAP Sample for the Web Method that exposes OrderRequest, only the VendorId property is visible, and not the inherited AuthenticationToken property. What's the deal?

Note: I've posted this issue as a bug on MS Connect: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=520200

+1  A: 

It should not be necessary to use [XmlInclude].

You seem to be judging this to be a problem because of the appearance of the help page (what you get in the browser when you hit the .asmx URL). Don't do that. Instead, look to see what is actually returned.


Update: The OP created a Connect bug for this issue. This bug was resolved as "won't fix" on 1/11/2010:

We have confirmed that the inherited properties do not show up in SOAP Sample on the browser and that is indeed a bug in the product.

At this point, this area is in maintainance mode, and no active work is planned.

John Saunders
Like I said, the WSDL and everything else is accurate - but the SOAP Samples (on the "help page") are not. This Web Service is consumed by our clients, and when I give them the asmx they look at it and are confused because it doesn't match our documentation. *I* know the samples aren't right, but it's not very professional looking for me to have to say, "by the way, ignore our samples on the asmx. It's a bug in .NET and we're not clever enough to figure out a way around it."
Grinn
I recommend you determine whether or not it's a bug, and which kind. I also recommend you recognize that ASMX web services are considered to be "legacy technology" by Microsoft, so if it's a bug, it won't be getting fixed. Note how WCF doesn't include a help page.
John Saunders
Good point. I should definitely expose the next version of this Web Service via WCF and just produce the SOAP Samples myself in my accompanying documentation. I'm not sure what you mean by, "whether or not it's a bug" though: The SOAP Sample doesn't expose all of the available properties, and if there is no way to cause it to expose them... what else would you call it? So, I guess the first step to determining if it's a bug is to see if there is a solution to the issue. Does anyone have any solutions out there?
Grinn
I mean, determine whether the base properties are sent and received. The samples are just a web page - they are not the service itself. See what the actual service actually does.
John Saunders
The service works fine. Those properties are sent and received. The issue is only visible in the samples.
Grinn
Then you should report the bug at http://connect.microsoft.com/visualstudio/ and post the URL to the Connect issue here (so readers can vote on the issue). Such a bug will not be fixed, in all likelihood, but go ahead and report it.
John Saunders
Thanks John. Here's the link: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=520200
Grinn
+2  A: 

I managed to stumble back-asswords into the solution for my problem, even after Microsoft confirmed it as a bug (https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=520200) and I had given up and marked John's answer as accepted. Here's the solution:

http://code.msdn.microsoft.com/WsdlHelpGenerator/Release/ProjectReleases.aspx?ReleaseId=412

Go there, download the file, then add the following line under the system.web section of your Web.config file:

<webServices>
 <wsdlHelpGenerator href="CustomWsdlHelpGenerator.aspx"/>
</webServices>

The href property should point to the relative location of your file within your project. Thanks for your help John.

Grinn
Glad to help, and thanks for posting the solution. This is the kind of thing we'll have to do on our own, now that ASMX web services are in maintenance mode (according to that Connect bug).
John Saunders