我在给一个WebService发送一个SOAP消息报文的时候总是不能接收到正确的参数。调试了半天才发现
ISoapSerializer生成的消息是:
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SOAPSDK1:Add xmlns:SOAPSDK1="http://tempuri.org/">
<N1>2</N1>
<N2>3</N2>
</SOAPSDK1:Add>
</soap:Body>
</soap:Envelope>
和WebService要求的多了一个SOAPSDK1的命名空间前缀,当我去掉SOAPSDK1并通过telnet发送给WebService的时候,成功了所以我的问题是,我怎么不让他出现SOAPSDK1呢?
代码如下
ISoapConnectorPtr Connector;
Connector.CreateInstance(__uuidof(HttpConnector));
Connector->Property["EndPointURL"]="http://localhost/dotNET/index.asmx";
Connector->Connect();ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;Connector->Property["SoapAction"]=("http://tempuri.org/Add").c_str();
Connector->BeginMessage();
// 创建SoapSerializer对象
Serializer.CreateInstance(__uuidof(SoapSerializer));
// 将serializer连接到connector的输入字符串
Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));
//Create SOAP Message
Serializer->startEnvelope("soap",_bstr_t(),"utf-8");
Serializer->startBody(_bstr_t());
Serializer->startElement("Add","http://tempuri.org/","NONE","");
Serializer->startElement("N1","","NONE","");
Serializer->writeString("2");
Serializer->endElement();
Serializer->startElement("N2","","NONE","");
Serializer->writeString("3");
Serializer->endElement();
Serializer->endElement();
Serializer->endBody();
Serializer->endEnvelope();
//Send message to web service
Connector->EndMessage();
//Read response
Reader.CreateInstance(__uuidof(SoapReader));
// 将reader联接到connector的输出字符串
Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");
return (char*)Reader->RPCResult->xml;
详细情况看这里:
http://community.csdn.net/Expert/TopicView3.asp?id=4133368
ISoapSerializer生成的消息是:
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SOAPSDK1:Add xmlns:SOAPSDK1="http://tempuri.org/">
<N1>2</N1>
<N2>3</N2>
</SOAPSDK1:Add>
</soap:Body>
</soap:Envelope>
和WebService要求的多了一个SOAPSDK1的命名空间前缀,当我去掉SOAPSDK1并通过telnet发送给WebService的时候,成功了所以我的问题是,我怎么不让他出现SOAPSDK1呢?
代码如下
ISoapConnectorPtr Connector;
Connector.CreateInstance(__uuidof(HttpConnector));
Connector->Property["EndPointURL"]="http://localhost/dotNET/index.asmx";
Connector->Connect();ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;Connector->Property["SoapAction"]=("http://tempuri.org/Add").c_str();
Connector->BeginMessage();
// 创建SoapSerializer对象
Serializer.CreateInstance(__uuidof(SoapSerializer));
// 将serializer连接到connector的输入字符串
Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));
//Create SOAP Message
Serializer->startEnvelope("soap",_bstr_t(),"utf-8");
Serializer->startBody(_bstr_t());
Serializer->startElement("Add","http://tempuri.org/","NONE","");
Serializer->startElement("N1","","NONE","");
Serializer->writeString("2");
Serializer->endElement();
Serializer->startElement("N2","","NONE","");
Serializer->writeString("3");
Serializer->endElement();
Serializer->endElement();
Serializer->endBody();
Serializer->endEnvelope();
//Send message to web service
Connector->EndMessage();
//Read response
Reader.CreateInstance(__uuidof(SoapReader));
// 将reader联接到connector的输出字符串
Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");
return (char*)Reader->RPCResult->xml;
详细情况看这里:
http://community.csdn.net/Expert/TopicView3.asp?id=4133368
解决方案 »
- 对话框抢了鼠标的LBUTTONUP事件怎么办呢?
- 关于tab控件使用时指针问题,很急!!
- C++中ADO多线程访问数据库为何不好用?
- 在CMainFrame::OnCreate中用SetWindowPlacement窗口的问题?
- 各位老大帮忙
- CTypedPtrList<CObList,CStroke*> 为何出现 Access Violation 错误?
- 请问如何判断字符串之间存在的标点符号,高分在线等待!
- ADO控制Access数据库
- 如何复用time_wait状态的端口
- 大家一般怎么显示进度条窗口啊?
- 不使用MS SOAP Toolkit能不能跟WebService相连?
- 怎么把诸如按钮之类的控件放到CView里头阿?并且添加事件处理过程?
Serializer->startElement("Add","http://tempuri.org/","NONE","");后面的三个参数都写空试试