青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Codejie's C++ Space

Using C++

GSOAP:使用模版封裝Serivce線程

通過GSOAP自帶的wsdl2h和soap2cpp可以生成基于C++語言的服務(wù)端代碼Service和客戶端代碼Proxy,這樣調(diào)用起來就很方便了。對于Service來說,只要將其放到一個線程中,等待客戶端連接并相應(yīng)請求就可以了;而對于客戶端,直接調(diào)用Proxy對象的方法就可以向服務(wù)端發(fā)送請求了。
??? 好用是好用,但如果Service很多的話,每個都寫一次線程封裝,這太可怕了,而一個線程帶動全部Service由不現(xiàn)實,這時,C++模版的威力就體現(xiàn)出來了~看如下代碼實例:
#ifndef?__SOAPSERVICETASKTEMPLATE_H__
#define?__SOAPSERVICETASKTEMPLATE_H__

#include?
<string>
#include?
<iostream>

#include?
"acex/ACEX.h"
#include?
"acex/Task.h"

#include?
"stdsoap2.h"

template
<typename?T>
class?CSoapServiceObject?:?public?T
{
public:

public:
????CSoapServiceObject()?{}
????
virtual?~CSoapServiceObject()?{}

????
int?Init(const?std::string&?strAddr);
????
void?Shutdown()?{?_bStop?=?true;?}
public:
????
virtual?int?svc();
private:
????
bool?_bStop;
????std::
string?_strHost;
????unsigned?
short?_usPort;
};

template
<typename?T>
int?CSoapServiceObject<T>::Init(const?std::string?&strAddr)
{
????std::
string::size_type?pos?=?strAddr.find(":");
????
if(pos?!=?std::string::npos)
????{
????????_strHost?
=?strAddr.substr(pos?+?1);
????????_usPort?
=?ACE_OS::atoi(_strHost.c_str());
????????_strHost?
=?strAddr.substr(0,?pos);
????}
????
else
????{
????????_usPort?
=?ACE_OS::atoi(strAddr.c_str());
????}
????
return?0;
}

template
<typename?T>
int?CSoapServiceObject<T>::svc()
{
????
if(_strHost.empty())
????{
????????
if(!soap_valid_socket(this->bind(NULL,?_usPort,?100)))
????????????
return?this->error;
????}
????
else
????{
????????
if(!soap_valid_socket(this->bind(_strHost.c_str(),?_usPort,?100)))
????????????
return?this->error;
????}

????
while(!_bStop)
????{
????????
if(!soap_valid_socket(this->accept()))
????????????
return?this->error;
????????
this->serve();
????????soap_destroy(
this);
????????soap_end(
this);
????}
????
return?0;
}


//////////////////////////////////////////////////////////////////////////
template<typename?T>
class?CSoapServiceTask?:?public?ACEX_Synch_Task
{
public:
????CSoapServiceTask()?{}
????
virtual?~CSoapServiceTask()?{}

????
int?Init(const?std::string&?strAddr);
????
void?Shutdown();

protected:
????
virtual?int?svc();
private:
????T?_objService;
};

template
<typename?T>
int?CSoapServiceTask<T>::Init(const?std::string&?strAddr)
{
????
return?_objService.Init(strAddr);
}

template
<typename?T>
void?CSoapServiceTask<T>::Shutdown()
{
????_objService.Shutdown();
}

template
<typename?T>
int?CSoapServiceTask<T>::svc()
{
????
return?_objService.svc();
}

#endif


??? 以上是對Service的封裝,使用時,只要用如下語句即可:
if(Service.Init(strAddr)?==?0)
{
??Service.activate();
}

??? 下面是一個使用實例:
#include?"SoapServiceTaskTemplate.h"
#include?
"soapSmsNotificationBindingService.h"

class?CSoapNotifyServiceObject?:?public?CSoapServiceObject<SmsNotificationBindingService>
{
public:
????CSoapNotifyServiceObject();
????
virtual?~CSoapNotifyServiceObject();

public:
????
virtual????int?notifySmsReception(isag5__notifySmsReception?*isag5__notifySmsReception_,?isag5__notifySmsReceptionResponse?*isag5__notifySmsReceptionResponse_);
????
virtual????int?notifySmsDeliveryReceipt(isag5__notifySmsDeliveryReceipt?*isag5__notifySmsDeliveryReceipt_,?isag5__notifySmsDeliveryReceiptResponse?*isag5__notifySmsDeliveryReceiptResponse_);
};

typedef?CSoapServiceTask
<CSoapNotifyServiceObject>?TSoapNotifyServiceTask;
typedef?ACE_Singleton
<TSoapNotifyServiceTask,?ACE_Recursive_Thread_Mutex>?TSoapNotifyServiceTask_Singleton;
#define?SoapNotifyServiceTask?TSoapNotifyServiceTask_Singleton::instance()

??? 使用如上方法,只需編寫Service相應(yīng)的函數(shù)即可,大大減少編寫重復(fù)代碼的時間,爽了~
??? 例子中使用的一個基類 ACEX_Synch_Task,是基于ACE封裝的線程類,功能和其它線程類類似,svc()函數(shù)為線程處理部分函數(shù)。WebService使用的是一個通訊行業(yè)的接口規(guī)范,不復(fù)雜,就是Service多的要命~

??? GSOAP使用的感覺就是--厲害但不好用。。。。。可能是我對WebService規(guī)范和GSOAP不熟悉所致,反正用起來很不順手,比如Service請求不能異步應(yīng)答,對于通訊消息處理代碼寫多的我來說,這個很不習(xí)慣,當(dāng)然也許是GSOAP支持,是我不會用。。。

??? GSOAP不好用,弄得我都想自己寫個基于C++的WebService庫來,但簡單看了SOAP規(guī)范后,我放棄了。。。太復(fù)雜了,每個三五個月,是不可能實現(xiàn)的。。。

posted on 2009-07-03 18:20 codejie 閱讀(1741) 評論(2)  編輯 收藏 引用 所屬分類: C++

評論

# re: GSOAP:使用模版封裝Serivce線程 2009-08-10 09:21 uwinb

soap_bind() 和 soap_accept() 等都定義在stdsoap2.cpp文件中
只有soap_serve()定義在soapServer.cpp文件中,與具體接口相關(guān)
所以即使不用模板這把利劍,通過函數(shù)指針也可以很好地封裝代碼

另一方面如果把多個wsdl文件合并后再生成代碼,(當(dāng)然我不會合并啦)
所有的接口不就能共用同一個服務(wù)器了  回復(fù)  更多評論   

# re: GSOAP:使用模版封裝Serivce線程 2009-08-10 10:57 codejie

嗯,模版我只是用到很習(xí)慣,函數(shù)指針,我一直認(rèn)為有點偏C,所以用的很少,也許按你的思路作會再簡單些~

多個WSDL合并,GSOAP是支持的,而且也蠻好用的;但是--我要用到的多個WSDL文件比較‘笨蛋’,其內(nèi)部定義的類型和調(diào)用在不同的文件中存在同名問題,這個搞死我了~  回復(fù)  更多評論   

公告

Using C++

導(dǎo)航

統(tǒng)計

留言簿(73)

隨筆分類(513)

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            老司机亚洲精品| 宅男精品导航| 在线视频欧美精品| 亚洲国产成人tv| 黄色成人精品网站| 在线精品高清中文字幕| 精品51国产黑色丝袜高跟鞋| 在线免费观看视频一区| 亚洲日韩视频| 日韩一级精品视频在线观看| 日韩一级黄色片| 亚洲一级片在线观看| 亚洲伊人一本大道中文字幕| 欧美国产日韩一区二区在线观看| 亚洲免费观看| 日韩一级视频免费观看在线| 一本综合精品| 欧美在线|欧美| 美国三级日本三级久久99| 久久综合久久综合久久综合| 91久久精品日日躁夜夜躁欧美 | 国产伦精品一区二区三区高清版 | 日韩亚洲欧美成人| 亚洲欧美日韩国产成人| 久久av一区二区三区| 欧美α欧美αv大片| 欧美视频三区在线播放| 激情文学综合丁香| 亚洲一区二区欧美日韩| 亚洲男同1069视频| 久久综合国产精品台湾中文娱乐网| 亚洲风情亚aⅴ在线发布| 一本色道久久88综合亚洲精品ⅰ | 蜜臀av在线播放一区二区三区| 亚洲欧洲精品天堂一级| 性做久久久久久免费观看欧美| 免费观看成人www动漫视频| 国产精品h在线观看| 亚洲大片免费看| 欧美一区=区| 亚洲精品一区二区三| 久久久免费av| 国产日韩在线不卡| 亚洲自拍电影| 日韩视频中文字幕| 欧美精品福利在线| 亚洲第一区在线| 久久久国际精品| 亚洲在线一区二区三区| 欧美日韩国产二区| 亚洲精品一区二区网址| 美日韩精品免费观看视频| 亚洲欧美日韩国产成人| 国产精品日韩欧美| 午夜精品一区二区三区电影天堂| 日韩视频中午一区| 欧美视频一区二区三区在线观看| 亚洲国产另类久久久精品极度| 久久婷婷丁香| 一区二区三区日韩| 久久精品五月| 欧美一区二区免费| 国产专区综合网| 久久久久久一区二区三区| 亚洲午夜精品一区二区三区他趣| 欧美午夜精品理论片a级按摩| 一本色道久久综合亚洲精品高清| 亚洲国产cao| 欧美日韩一二三四五区| 亚洲一区一卡| 欧美一乱一性一交一视频| 国产精品亚洲综合色区韩国| a91a精品视频在线观看| 一区二区三区日韩在线观看| 国产精品国产成人国产三级| 亚洲欧美日韩一区二区三区在线观看| 亚洲一区二区3| 在线精品观看| 一本色道久久综合亚洲精品小说 | 久久av一区二区| 久久高清免费观看| 国内外成人在线视频| 美女精品视频一区| 欧美日韩高清在线播放| 午夜日本精品| 久久久久国产一区二区| 亚洲伦理在线| 亚洲欧美日本国产有色| 亚洲电影专区| 亚洲一区二区三区三| 精品9999| 99精品欧美一区二区三区| 国产美女精品视频免费观看| 农村妇女精品| 国产精品porn| 欧美成年人视频网站| 欧美午夜宅男影院在线观看| 久久人人精品| 国产精品成人久久久久| 久久综合久久久久88| 欧美日韩岛国| 久久精品成人欧美大片古装| 免费观看久久久4p| 久久久久久亚洲精品杨幂换脸 | 亚洲自拍偷拍网址| 久久久久久穴| 亚洲午夜日本在线观看| 香蕉精品999视频一区二区 | 日韩一区二区精品葵司在线| 国产亚洲欧美日韩在线一区| 亚洲天堂免费观看| 亚洲午夜精品视频| 欧美插天视频在线播放| 久久视频国产精品免费视频在线 | 一区二区三区成人精品| 男女激情久久| 玖玖视频精品| 亚洲电影在线免费观看| 久久一本综合频道| 免费日韩av| 亚洲精品久久视频| 一区二区三区精品国产| 亚洲一级网站| 久久久www成人免费毛片麻豆| 久久av一区二区| 狂野欧美激情性xxxx欧美| 久久久久久久综合狠狠综合| 久久人人爽人人爽爽久久| 麻豆av福利av久久av| 欧美三级网址| 在线观看国产精品淫| 一区二区三区视频免费在线观看| 宅男66日本亚洲欧美视频| 久久国产主播精品| 亚洲一区精品在线| 91久久久久久国产精品| 久久乐国产精品| 影音先锋亚洲精品| 欧美国产综合一区二区| 亚洲社区在线观看| 久久精品国产99| 国产精品羞羞答答xxdd| 在线亚洲免费视频| 久久精品官网| 在线免费不卡视频| 国产精品一区视频| 国产精品h在线观看| 日韩亚洲欧美综合| 亚洲国产精彩中文乱码av在线播放| 亚洲国产精品成人久久综合一区 | 国产亚洲精品aa午夜观看| 中文久久精品| 亚洲成人资源| 亚洲精品日韩精品| 国产精品欧美在线| 欧美激情亚洲精品| 国产精品99久久久久久宅男| 久久久噜噜噜久噜久久| 亚洲人成高清| 韩国av一区二区| 国产免费成人在线视频| 国产精品高潮视频| 欧美性片在线观看| 欧美国产一区在线| 欧美乱在线观看| 国产欧美成人| 国产亚洲日本欧美韩国| 亚洲国产欧美另类丝袜| 日韩网站在线观看| 9国产精品视频| 国产免费观看久久黄| 欧美在线观看一区| 久久午夜av| 亚洲线精品一区二区三区八戒| 日韩一级免费| 悠悠资源网亚洲青| 亚洲国产精品久久久| 国产精品av免费在线观看| 久久精品国产77777蜜臀| 欧美国产日韩一区| 久久亚洲精品一区二区| 欧美日本国产视频| 美女91精品| 国产日韩在线一区| 亚洲精品网站在线播放gif| 国产午夜精品一区理论片飘花| 亚洲黄色成人| 亚洲国产欧美日韩| 国产一区欧美| 99av国产精品欲麻豆| 在线观看日韩欧美| 久久精品国产精品亚洲综合| 亚洲特黄一级片| 欧美精品免费在线| 最近中文字幕mv在线一区二区三区四区 | 欧美精品久久久久久久| 久久精品最新地址| 国产亚洲欧美日韩一区二区| 亚洲欧美综合精品久久成人| 香港成人在线视频|