I've tried the combinations:

C# web service/ CLR C++ client --> success
C# web service / native C++ client --> success
JAX-WS web service / C# client --> success
JAX-WS web service / CLR C++ client --> success
JAX-WS web service / native C++ client --> fail

All of them succeed except the last one. The IDE reports when adding the web reference:
1>sproxy : error SDL1000 : Unspecified error
1>sproxy : error SDL1002 : failure in generating output file: "WebReference.h"

One difference I notice when adding C# web service & JAX-WS service is that:
when adding a C# service, I have
Methods
sayHello ( ) As string
but when adding a JAX-WS service I have
Methods
sayHello ( ) 
Seems the return type is missing. After inspecting the two wsdl, I find the the return type is directly contained in the C# service WSDL:
<s:complexType>
  <s:sequence>
  <s:element minOccurs="0" maxOccurs="1" name="sayHelloResult" type="s:string" /> 
  </s:sequence>
</s:complexType>
while in the JAX-WS WSDL, it presents as a reference:
<xsd:schema>
  <xsd:import namespace="http://www.zorrogps.com" schemaLocation="http://localhost:8080/WebService/HelloServicePort?xsd=1" /> 
</xsd:schema>
in http://localhost:8080/WebService/HelloServicePort?xsd=1:
<xs:complexType name="sayHelloResponse"> <xs:sequence> <xs:element name="return" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType>
I guess VC is not able to parse the reference in WSDL which leads to the failure of adding web reference. Is there any solution for that?