QtSoap 개발 웹 서비스 클 라 이언 트 프로그램

먼저 QtSoap 오픈 소스 패 키 지 를 다운로드 해 야 합 니 다. 다운로드 주 소 는 다음 과 같 습 니 다.
http://www.filestube.com/q/qtsoap+download,
제 가 사용 하 는 것 은: qtsoap - 2.6 - opensource (설치 할 필요 없 이 특정한 디 렉 터 리 에 직접 압축 을 풀 면 됩 니 다) 입 니 다.
   QtSoap 을 사용 해 본 적 이 없다 면 디 렉 터 리 'examples' 에 easter, google, population 세 가지 예 가 있 습 니 다.
 
Note to Qt Visual Studio Integration users: In the instructions below, instead of building from command line with nmake, you can use the menu command 'Qt->Open Solution from .pro file' on the .pro files in the example and plugin directories, and then build from within Visual Studio.
VS + Qt 개발 방식 을 사용 했다 면 메뉴 의 'Qt → Open Qt Project File (. pro)' 을 사용 하여 위 프로젝트 파일 을 엽 니 다.
 
    저 는 VS 2010 을 사 용 했 습 니 다. 상기 방법 을 사 용 했 을 때 정상적으로 불 러 올 수 없 었 습 니 다. 그래서 저 는 먼저 VS 2005 로 열 었 습 니 다. VS 2005 에서 상기 항목 을 저장 한 다음 에 VS 2010 에서 다시 열 었 습 니 다. 물론 VS 2010 에서 다시 열 었 을 때 형식 전환 이 필요 하 다 고 알려 주 었 습 니 다. 성공 한 후에 Demo 를 컴 파일 하여 실행 할 수 있 습 니 다.
 
저 는 먼저 다시 썼 습 니 다: population, 주로 QtSoap 및 개발 설정 을 익히 기 위해 서 입 니 다.
 
1. 헤더 파일 (xxx. h) 에서 변 수 를 정의 합 니 다 (XXX 는 클래스 이름 입 니 다. 다시 정의 하 십시오).
 
#include 

class QTextEdit;
 
private slots:     void 
getResponse();
private:     
QTextEdit   
*m_pWeatherEdt;
private:     QtSoapHttpTransport http;
 
2 클래스 의 구조 함수 에서:
    
m_pWeatherEdt = 
new QTextEdit(
this);
    connect(&http, SIGNAL(responseReady()), SLOT(getResponse()));
 
3 요청 발송:
void XXX::
submitRequest()
{
    http.
setHost(" www.abundanttech.com");
    
QtSoapMessage 
request;
    
http.
setAction  (" http://www.abundanttech.com/WebServices/Population/getPopulation");
    
request.
setMethod("getPopulation", " http://www.abundanttech.com/WebServices/Population");
    
request.
addMethodArgument
("strCountry", 
"", 
"china");
    
http.
submitRequest(request, 
"/WebServices/Population/population.asmx");
 }
 
이상 매개 변 수 를 보십시오:http://www.abundanttech.com/WebServices/Population/population.asmx
다음 과 같다.
SOAP
The following is a sample SOAP request and response. The placeholders shown need to be replaced with actual values.
POST /WebServices/Population/population.asmx HTTP/1.1
Host: www.abundanttech.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.abundanttech.com/WebServices/Population/getPopulation"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <getPopulation xmlns="http://www.abundanttech.com/WebServices/Population">
      <strCountry>string</strCountry>
    </getPopulation>
  </soap:Body>
</soap:Envelope>

물론, 당신 도 "중국 기상 국" 의 웹 서 비 스 를 사용 하여 테스트 예 시 를 할 수 있 습 니 다.
void XXX::submitRequest() {
    http.setHost("www.ayandy.com");     QtSoapMessage request;
    http.setAction("http://tempuri.org/getSupportProvince
");     request.setMethod("getSupportProvince", "http://tempuri.org/
");     http.submitRequest(request, "/Service.asmx");
 }
이상 매개 변 수 를 보십시오:http://www.ayandy.com/Service.asmx다음 과 같다.
SOAP 1.1
다음은 SOAP 1.2 요청 과 응답 예제 입 니 다. 표시 되 는 대체 자 는 실제 값 으로 바 꿔 야 합 니 다.
POST /Service.asmx HTTP/1.1
Host: www.ayandy.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/getSupportProvince"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <getSupportProvince xmlns="http://tempuri.org/" />
  </soap:Body>
</soap:Envelope>

 
4 회복 해석:
void XXX::getResponse() {
 
   // Get a reference to the response message.
    const QtSoapMessage &message = http.getResponse();
    // Check if the response is a SOAP Fault message     if (message.isFault())      {         m_pWeatherEdt->append(message.faultString().value().toString().toLatin1().constData());     }     else      {         // Get the return value, and print the result.         const QtSoapType &response = message.returnValue();         m_pWeatherEdt->append(response["Country"].value().toString().toLatin1().constData());         m_pWeatherEdt->append(response["Pop"].value().toString().toLatin1().constData());         m_pWeatherEdt->append(response["Date"].value().toString().toLatin1().constData());
    } }
이상 의 방법 은 고정된 유형의 소식 만 해석 할 수 있 습 니 다. 다음은 일반적인 방법 을 소개 합 니 다.
void XXX::getResponse() {
    // Get a reference to the response message.     const QtSoapMessage &message = http.getResponse();
    // Check if the response is a SOAP Fault message     if (message.isFault())      {         m_pWeatherEdt->append(message.faultString().value().toString().toLatin1().constData());     }     else      {         const QtSoapType &root = message.returnValue();         QtSoapStruct myStruct((QtSoapStruct&)root);
        //되 돌아 오 는 구조 체 를
QtSoapStruct         for (int i = 0; i < myStruct.count(); i++)         {             m_pWeatherEdt->append(myStruct[i].typeName() + " : " + myStruct[i].toString());         }
   
    } }

좋은 웹페이지 즐겨찾기