小弟初学Web Service,望大家不要笑话!这是我的 C# 服务端代码:                   …… (前面省略)
                   [WebMethod]
public int AddNumbers(int NumberOne, int NumberTwo)
{
return NumberOne + NumberTwo;
}
                  ……(后面省略)
编译、部署都没有问题。而且别人编写的客户端是可以正常调用的,它会把两个输入的整型参数相加,返回结果。然而……
这是我的VC6 客户端代码:          ……(前面省略)
          CoInitialize(NULL);
          ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;
ISoapConnectorPtr Connector;

// Connect to the service
Connector.CreateInstance(__uuidof(HttpConnector));
Connector->Property["EndPointURL"] = "http://localhost/webservice1/service1.asmx?WSDL";
Connector->Connect();

// Begin message
Connector->Property["SoapAction"] = "http://tempuri.org/AddNumbers";
Connector->BeginMessage();

// Create the SoapSerializer
Serializer.CreateInstance(__uuidof(SoapSerializer));

// Connect the serializer to the input stream of the connector
Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));

// Build the SOAP Message
Serializer->startEnvelope("","","");
Serializer->startBody("");
Serializer->startElement("AddNumbers","","","");
Serializer->startElement("NumberOne","","","");
Serializer->writeString("5");
Serializer->endElement();
Serializer->startElement("NumberTwo","","","");
Serializer->writeString("10");
Serializer->endElement();
Serializer->endElement();
Serializer->endBody();
Serializer->endEnvelope();

// Send the message to the web service
Connector->EndMessage();      

// Let us read the response
Reader.CreateInstance(__uuidof(SoapReader));

// Connect the reader to the output stream of the connector
Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");

// Display the result
printf("Answer: %s\n", (const char*)Reader->RPCResult->text);
         CoUninitialize();
         ……(后面省略)如果用以上客户端调用服务端,控制台屏幕输出的结果是 0 ,我猜想问题出在客户端传到服务端的参数不是整型值,因此服务端按 0 处理。不幸的是,现在客户端被限定只能用 VC6 编写,服务端也只能用 C# 编写。于是小弟迫切想知道:如何在 VC6 编写的客户端给 C# 编写的服务端传递整型等实参?小弟好生苦恼,望各位高手给小弟修改一下代码,多谢!注:我试过,如果用VB6 编写类似做整型相加的服务端的话,我这个客户端是完全可以正确调用的。这是为什么呢?

解决方案 »

  1.   

    [WebMethod]
    public int AddNumbers(int NumberOne, int NumberTwo)
    {
    return NumberOne + NumberTwo;
    }我的意思是:
    你试一试
                       [WebMethod]
    public int AddNumbers(string NumberOne, string NumberTwo)
    {
    return (Int.Parse(NumberOne) + Int.Parse(NumberTwo)).ToString();
    }
      

  2.   

    在你的StartElement的参数中加上命名空间就应该可以了
    我遇到过
      

  3.   

    看看 MSDN中有一个基于高层的编程例子不用了解SOAP协议都都可以查关键词web service就可以其中有一个VC++使用web service!例子写得很清楚!