VC如何调用带有复杂数据类型的WebService

heaven_2002 2006-02-23 11:12:50
现在有一个Java开发的WebService,其中有用户自定义的对象类型,客户端是VC6.0,查了一下微软的Soap Toolkit,在VC中访问复杂数据类型,好像需要提供一个WSML文件,用于描述类型对应关系,然而,微软提供的工具都需要访问Web Servic组件(COM对象)才能生成WSML文件,但是现在服务器端是Java开发的,请问VC访问Java开发的带有自定义对象类型的WebService有没有什么好办法。

提供解决方案或代码都行。
...全文
290 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
heaven_2002 2006-02-28
  • 打赏
  • 举报
回复
ding!
heaven_2002 2006-02-27
  • 打赏
  • 举报
回复
谢谢两位,但是解决不了复杂数据类型的调用,还有没有别的办法.
dragonfly001 2006-02-27
  • 打赏
  • 举报
回复
up!!
pripor 2006-02-27
  • 打赏
  • 举报
回复
up
xing_xing_xing 2006-02-26
  • 打赏
  • 举报
回复
http://www.codeproject.com/webservices/SoapClient_CPP.asp也许有用
AAAAAANWJ 2006-02-26
  • 打赏
  • 举报
回复
我写过简单类型的调WebService 复杂类型要用到一个COM接口,没往下研究了,你要是坚持要用VC6,研究一下COM一定就能搞定。
BOOL ServerXMLHTTP1::CallWebService(STRUCT_USER_OPERATE &sUser,int i)
{
HRESULT hr = CoInitialize(NULL);
CHECK_HR(hr);


USES_CONVERSION;
// Create an instance of ServerXMLHTTP Class
CComPtr<IServerXMLHTTPRequest> spServerXMLHTTP1;
hr=-1;
hr = spServerXMLHTTP1.CoCreateInstance(CLSID_ServerXMLHTTP40);
CHECK_HR(hr);

TCHAR szGetURL[MAX_PATH*2]={0};
TCHAR szPostValue[MAX_PATH*2]={0};
TCHAR szSOAPReq[MAX_PATH*2]={0};
TCHAR szSoapAction[MAX_PATH] = {0};
sprintf(szSoapAction,g_lpszSOAPAction,sUser.strSoapAction.GetBuffer(0));
int iPostDataLen =0;
TCHAR szDataLen[10]={0};
switch(i)
{
case(RETRIEVEUSER2):
sprintf(szSOAPReq, g_lpszSOAPReq1,sUser.strSim.GetBuffer(0),sUser.strSex.GetBuffer(0),sUser.strUserid.GetBuffer(0),sUser.strNickname.GetBuffer(0));
break;
default:
return FALSE;

}

hr = spServerXMLHTTP1->open(_bstr_t(_T("POST")), g_lpszSOAPEndpointURL, VARIANT_FALSE);
CHECK_HR(hr);

// Set the required SOAPAction and Content-Type headers
hr = spServerXMLHTTP1->setRequestHeader(_T("SOAPAction"), szSoapAction);//g_lpszSOAPAction1
TRACE(szSoapAction);
TRACE("\r\n");

CHECK_HR(hr);
hr = spServerXMLHTTP1->setRequestHeader(_bstr_t(_T("Content-Type")), _bstr_t(_T("text/xml")));
CHECK_HR(hr);

// Send the POST request, along with the SOAP request envelope text
try
{
hr = spServerXMLHTTP1->send(_bstr_t(szSOAPReq));
CHECK_HR(hr);

}
catch(...)
{
spServerXMLHTTP1.Release();
return FALSE;
}

if(200 == spServerXMLHTTP1->status) //Success
{
// using MSXML DOM to process the response XML text
CComQIPtr <IXMLDOMDocument2> spResponseXMLDoc;

spResponseXMLDoc = spServerXMLHTTP1->responseXML;
spResponseXMLDoc->setProperty(_bstr_t(_T("SelectionNamespaces")), g_lpszXPathSelNS);

TCHAR szszResult[MAX_PATH] = {0};
TCHAR szszAiGender[MAX_PATH] = {0};
TCHAR szszAsUserID[MAX_PATH] = {0};

switch(i)
{
case(RETRIEVEUSER2):
GetXPathExprValue(spResponseXMLDoc, _T("//ns1:retrieveUser2Result"), szszResult);
case(UPDATEUSER):
GetXPathExprValue(spResponseXMLDoc, _T("//ns1:updateUserResult"), szszResult);
break;
case(UNREGUSER):
GetXPathExprValue(spResponseXMLDoc, _T("//ns1:unregUserResult"), szszResult);
break;
case(ISREGISTERED):
GetXPathExprValue(spResponseXMLDoc, _T("//ns1:isRegisteredResult"), szszOld);
break;
case(RETRIEVEUSERBYID):
GetXPathExprValue(spResponseXMLDoc, _T("//ns1:unregUserResult"), szszResult);
break;
default:
return FALSE;
}
sUser.strSex=szszAiGender;
sUser.strflag=szszResult;
}
spServerXMLHTTP1.Release();

CoUninitialize();
return TRUE;
}
heaven_2002 2006-02-25
  • 打赏
  • 举报
回复
客户端已经是VC6开发的了,现在要增加访问WebService的功能,所以不能换成Visual2003了。
heaven_2002 2006-02-24
  • 打赏
  • 举报
回复
顶。
xing_xing_xing 2006-02-24
  • 打赏
  • 举报
回复
如果是VS2003可以直接根据WebService生成对应的类对象,不管使用什么开发的。VC6不支持
heaven_2002 2006-02-24
  • 打赏
  • 举报
回复
再顶。
heaven_2002 2006-02-23
  • 打赏
  • 举报
回复
没有人知道吗?给点建议也行。

18,355

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧