2013-10-21 44 views
1

我正在嘗試編寫一個可以與EWS代理類一起工作的應用程序。爲了生成代理類,我使用了gsoap(編譯的OpenSSL)。 我已經實現了一個與EWS一起工作的庫,但是。淨。 問題是這樣的:我不知道如何實現到服務器的連接。 執行以下操作:gSoap交換Web服務連接

ExchangeServiceBindingProxy *proxy = new ExchangeServiceBindingProxy("https://192.168.0.49/EWS/exchange.asmx"); 
soap *pSoap = proxy->soap; 
pSoap->userid = "user1"; 
pSoap->passwd = "password1"; 
pSoap->recv_timeout = 300; 
pSoap->send_timeout = 300; 

SOAP_ENV__Header *header = new SOAP_ENV__Header(); 
header->ns3__RequestServerVersion = new _ns3__RequestServerVersion(); 
header->ns3__RequestServerVersion->soap = pSoap; 
header->ns3__RequestServerVersion->Version = ns3__ExchangeVersionType__Exchange2010; 
pSoap->header = header; 

//get root folder ID 
ns3__DistinguishedFolderIdType *dfit = new ns3__DistinguishedFolderIdType(); 
dfit->Id = ns3__DistinguishedFolderIdNameType__inbox; 

//set the props that we want to retrieve 
ns3__FolderResponseShapeType *frst = new ns3__FolderResponseShapeType(); 
frst->BaseShape = ns3__DefaultShapeNamesType__AllProperties; 

//get folder 
ns1__GetFolderType *gftRoot = new ns1__GetFolderType(); 
gftRoot->FolderIds = new ns3__NonEmptyArrayOfBaseFolderIdsType(); 
gftRoot->FolderIds->__union_NonEmptyArrayOfBaseFolderIdsType = new __ns3__union_NonEmptyArrayOfBaseFolderIdsType(); 
gftRoot->FolderIds->__union_NonEmptyArrayOfBaseFolderIdsType->union_NonEmptyArrayOfBaseFolderIdsType.DistinguishedFolderId = dfit; 
gftRoot->FolderShape = frst; 
__ns1__GetFolderResponse response; 


int error = proxy->GetFolder(gftRoot, response); 

其結果是,得到錯誤:SLL_ERROR。

我知道,我做錯了什麼。但是什麼?我應該怎麼做,使用代理類功能?

回答

0

我自己解決了它: 添加到項目LibNTLM並添加到預處理器WITH_NTLM。

也改變了代碼,一點點:

ExchangeServiceBindingProxy *proxy = new ExchangeServiceBindingProxy(endpoint.c_str()); 

soap *pSoap = proxy->soap; 
pSoap->userid = "Ivan1"; 
pSoap->passwd = "1"; 
pSoap->ntlm_challenge = ""; 
pSoap->authrealm = "Ursa-Minor"; 

pSoap->ssl_flags = SOAP_SSL_NO_AUTHENTICATION; 
//pSoap->keep_alive = true; 
pSoap->mode = SOAP_IO_KEEPALIVE; 

//get root folder ID 
ns3__DistinguishedFolderIdType *dfit = new ns3__DistinguishedFolderIdType(); 
dfit->Id = ns3__DistinguishedFolderIdNameType__inbox; 

//set the props that we want to retrieve 
ns3__FolderResponseShapeType *frst = new ns3__FolderResponseShapeType(); 
frst->BaseShape = ns3__DefaultShapeNamesType__AllProperties; 

//get folder 
ns1__GetFolderType *gftRoot = new ns1__GetFolderType(); 
gftRoot->FolderIds = new ns3__NonEmptyArrayOfBaseFolderIdsType(); 
gftRoot->FolderIds->__size_NonEmptyArrayOfBaseFolderIdsType = 1; 
gftRoot->FolderIds->__union_NonEmptyArrayOfBaseFolderIdsType = new __ns3__union_NonEmptyArrayOfBaseFolderIdsType(); 
gftRoot->FolderIds->__union_NonEmptyArrayOfBaseFolderIdsType->union_NonEmptyArrayOfBaseFolderIdsType.DistinguishedFolderId = dfit; 
gftRoot->FolderIds = (ns3__NonEmptyArrayOfBaseFolderIdsType*)dfit; 
gftRoot->FolderShape = frst; 
__ns1__GetFolderResponse response; 

int qq = proxy->GetFolder(gftRoot, response); 

return true; 

但現在我有enother問題:Error 500: Internal Server Error