通用 WebService 的调用方法 SOAP3.0支持需要

 

声明了一个结构

 

typedef struct _mysoaparm
{
 TCHAR parm_name[20];
 TCHAR parm_value[8000];
}MYSOAPARM,*PMYSOAPARM;

 


/* 通用WebService查询接口 */
BOOL CMySoap::query(TCHAR* EndPointURL,//WebService URL
     TCHAR* NameSpace, //命名空间
     TCHAR* Method,//方法
     int argv_len,//参数个数
     MYSOAPARM* pargs,//参数
     TCHAR* pRes//返回值
     )
{
 CString szAction;
 HRESULT hr;
 int   errcode = 0;
 try
 {
  Connector->Property["EndPointURL"] = (LPSTR)(LPCTSTR)EndPointURL;
  hr = Connector->Connect(); //连接服务器
  if FAILED(hr) throw errcode;
  szAction.Format(_T("%s%s"),NameSpace,Method);
  Connector->Property["SoapAction"] = (LPSTR)(LPCTSTR)szAction;
  Connector->BeginMessage();
  Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));
  // 创建SOAP消息
  Serializer->StartEnvelope("","","");
  Serializer->StartBody("");
  Serializer->StartElement(Method,(LPSTR)(LPCTSTR)NameSpace,"","");
  for(int i=0;i<argv_len;i++)
  {
   Serializer->StartElement(pargs[i].parm_name,"","","");//命名空间必须有
   Serializer->WriteString(pargs[i].parm_value);
   Serializer->EndElement();
  }
  //结束SOAP消息创建
  Serializer->EndElement();
  Serializer->EndBody();
  Serializer->EndEnvelope();
  // Send the message to the web service
  Connector->EndMessage();
  //读取返回值
  Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");
  strcpy(pRes,(const char*)Reader->RpcResult->text);
 }
 catch(...)
 {
  return FALSE;
 }
 return TRUE;
}

 

下面是一个调用的例子

 

 

/* 发送短信接口 */
int CMySoap::smsSendMessage(CString szMobile,
        CString szContent,
        CString SEQ,
        CString szSendTime,
        CString szTask)
{
 int ErrCode = 0;
 TCHAR szResponse[10] = {0};
 MYSOAPARM  accParm[9]; //smsSend
 if(szMobile.GetLength()<=0) return -100;
 if(szContent.GetLength()<=0) return -100;
 //第一个参数
 strcpy(accParm[0].parm_name,_T("ECODE"));
 strcpy(accParm[0].parm_value,this->ECode);
 //第二个参数
 strcpy(accParm[1].parm_name,_T("EXTNO"));
 strcpy(accParm[1].parm_value,this->ExtNo);
 //第三个参数
 strcpy(accParm[2].parm_name,_T("USERNAME"));
 strcpy(accParm[2].parm_value,this->UserName);
 //第四个参数
 strcpy(accParm[3].parm_name,_T("PASSWORD"));
 strcpy(accParm[3].parm_value,this->Password);
 //第五个参数
 strcpy(accParm[4].parm_name,_T("MOBILE"));
 strcpy(accParm[4].parm_value,(LPSTR)(LPCTSTR)szMobile);
 //第六个参数
 strcpy(accParm[5].parm_name,_T("CONTENT"));
 strcpy(accParm[5].parm_value,(LPSTR)(LPCTSTR)szContent);
 //第七个参数
 strcpy(accParm[6].parm_name,_T("SEQ"));
 strcpy(accParm[6].parm_value,(LPSTR)(LPCTSTR)SEQ);
 //第八个参数
 strcpy(accParm[7].parm_name,_T("SENDTIME"));
 strcpy(accParm[7].parm_value,(LPSTR)(LPCTSTR)szSendTime);
 //第九个参数
 strcpy(accParm[8].parm_name,_T("TASK"));
 strcpy(accParm[8].parm_value,(LPSTR)(LPCTSTR)szTask);
 //调用通用查询并获得结果
 if(!this->query((LPSTR)(LPCTSTR)this->szURL,
     (LPSTR)(LPCTSTR)this->szNameSpace,
     _T("smsSend"),
     9,
     accParm,
     szResponse))
     return FALSE;
 ErrCode = atoi(szResponse);
 return ErrCode;
}

 

 

调用之前需要对SOAP对象做初始化

 

/* 初始化SOAP对象 */
BOOL CMySoap::OfInit()
{
 // Connect to the service
 HRESULT hr;
 hr = Connector.CreateInstance(__uuidof(HttpConnector30));
 if(FAILED(hr)) return FALSE;
 hr = Serializer.CreateInstance(__uuidof(SoapSerializer30));
 if(FAILED(hr)) return FALSE;
 hr = Reader.CreateInstance(__uuidof(SoapReader30));
 if(FAILED(hr)) return FALSE;
 return TRUE;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值