描述:
小弟初学Web Service,望大家不要笑话!
这是我的 C# 服务端代码:
…… (前面省略)
[WebMethod]
public int AddNumbers(int NumberOne, int NumberTwo)
{
return NumberOne + NumberTwo;
}
……(后面省略)
编译、部署都没有问题。而且别人编写的客户端是可以正常调用的,它会把两个输入的整型参数相加,返回结果。
然而……
这是我的VC6 客户端代码(使用SOAP3):
#include "stdafx.h"
#include "atlbase.h"
#include <stdio.h>
#import "msxml4.dll"
using namespace MSXML2;
#import "C:\Program Files\Common Files\MSSoap\Binaries\mssoap30.dll" \
exclude("IStream", "IErrorInfo", "ISequentialStream", "_LARGE_INTEGER", \
"_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")
using namespace MSSOAPLib30;
……
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 编写类似做整型相加的服务端的话,我这个客户端是完全可以正确调用的。这是为什么呢?