PDA

Просмотр полной версии : Как из веб службы соединиться с источником данных?



Anonymous
18.11.2004, 13:23
Добрый день всем!
Я сделал веб службу на базе ATL Server Web Service.
Пытаюсь из неё подсоединиться к источнику данных так
...
#import "c:\program files\common files\system\ado\msado15.dll" rename ("EOF","adoEOF") no_namespace

#define CREATEiNSTANCE(sp,riid) { HRESULT _hr =sp .CreateInstance( __uuidof( riid ) ); \
if (FAILED(_hr)) _com_issue_error(_hr); }
...
...
...
class CMyService :
public IMyService
{
...
...
...
public:
_ConnectionPtr spCON;
_RecordsetPtr spRS;

_ConnectionPtr spCON;
_RecordsetPtr spRS;
...
...
...
[ soap_method ]
HRESULT OpenConn(/*[out, retval]*/ BSTR *bstrRes)
{

HRESULT hr;
hr=CoInitialize(NULL);
CREATEiNSTANCE(spCON,Connection);
spCON->ConnectionString =L"DSN=mydsn";
hr=spCON->Open ("","","",adConnectUnspecified);
if (FAILED(hr))
{
_com_error err(hr);
const char * pszErrorDescr = err.ErrorMessage();
CComBSTR bstrOut(pszErrorDescr);
*bstrRes=bstrOut.Detach ();
return hr;
}
}
...
...
...
}; // class CMyService

Не соединяется, и не возвращает в *bstrRes описание ошибки, просто в клиентской программе возвращается E_FAIL. Я убрал условие if (FAILED(hr))
и поместил всё это в try ... catch{
_com_error err(hr);
const char * pszErrorDescr = err.ErrorMessage();
CComBSTR bstrOut(pszErrorDescr);
*bstrRes=bstrOut.Detach ();
return hr;
}
в hr стало возвращаться S_OK и в *bstrRes строка что всё прошло успешно.
Т.е. получается что ошибка не в подключении а где-то в другом месте.
Но где?!
Если бы я мог зайти по точке останова в веб службу, но я пробовал программа
виснет.
Подскажите пожалуйста как из веб службы соединиться с источником данных или как отладить веб службу?
Заранее большое спасибо!!!
P.S. Данный код подсоединения успешно работает в других типах программ,
например в консольном приложении.

Anonymous
23.11.2004, 13:04
Писать на .NET - там проблем с отладкой веб-сервисов не возникает :)