Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / HELP! помогите правильное подключение и отключение через DCOM/COM Клиент/Сервер / 1 сообщений из 1, страница 1 из 1
25.08.2014, 09:16
    #38727784
Кузнец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! помогите правильное подключение и отключение через DCOM/COM Клиент/Сервер
правильное подключение и отключение через DCOM/COM Клиент/Сервер КАК сделать????.. что я не то сделал???

На стороне Сервера DLL Microsoft Transaction Server
в нем есть обьект

CMyDatabase от IMyDatabase
IMyDatabase от IUnknown
MTS
Support IObjectControl включен
Can be pooled включен

Interface Custom включен
Код: plaintext
1.
2.
3.
4.
5.
class ATL_NO_VTABLE CMyDatabase : 
	public CComObjectRootEx<CComMultiThreadModel>,
	public CComCoClass<CMyDatabase, &CLSID_MyDatabase>,
	public IObjectControl,
	public IMyDatabase



в RGS файле
val ThreadingModel = s 'Both'

вообщем открываю подключение через клиента на этот метод на сервере
Код на Сервере
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
STDMETHODIMP CMyDatabase::OpenConnection(BSTR ConnectionString, BSTR UID, BSTR PWD, long Options)
{

	HRESULT hr = m_connection.CreateInstance(__uuidof(Connection));
	if (SUCCEEDED(hr))
		hr = m_connection->Open(ConnectionString, UID, PWD, Options);
	if (SUCCEEDED(hr))
		hr = m_command.CreateInstance(__uuidof(Command));
	if (SUCCEEDED(hr))
		hr = m_command->putref_ActiveConnection(m_connection);
	if (SUCCEEDED(hr))
		hr = m_recordset.CreateInstance(__uuidof(Recordset));

	AddRef(); //счетчик доб

	return hr;
}

STDMETHODIMP CMyDatabase::LogOut()
{
	m_recordset->Close();
	m_connection->Close();
	Release(); //счетчик убав
	return S_OK;
}



Код на клиенте
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
void CClientDlg::OnConnect() 
{
	CLSID clsid;
	HRESULT hr;

	UpdateData();

	hr = AfxGetClassIDFromString(m_progid, &clsid);
	if (FAILED(hr))
	{
		MessageBox("Could not get class id");
		return;
	}

	 COSERVERINFO serverinfo;
	 COSERVERINFO* pServerInfo;
	 DWORD dwContext;

	 MULTI_QI qi[1] = {				
						{&IID_IMyDatabase, NULL, 0}
	 };
	 	 
	 if (m_nLocalRemote == 0)
	 {
		 pServerInfo = NULL;
		 dwContext = CLSCTX_LOCAL_SERVER; 
	 }
	 else 
	 {
		serverinfo.dwReserved1 = 0;
		serverinfo.dwReserved2 = 0;
		serverinfo.pwszName = m_strServer.AllocSysString();
		serverinfo.pAuthInfo = NULL;
		pServerInfo = &serverinfo;
		dwContext = CLSCTX_REMOTE_SERVER;
	 }

	 hr = CoCreateInstanceEx(clsid, NULL, dwContext, 
		                     pServerInfo, 1, qi);
	
	if (SUCCEEDED(hr))
	{
		m_pDatabase = (IMyDatabase* )qi[0].pItf;



		
		MessageBox("Соединение ОК.", "OnConnect");

	}
	else
		MessageBox("не смог соедениться.", "OnConnect");	
}



Подключение проходит ОК!
Ну вот подключение к Базе данных тоже ОК!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
void CClientDlg::OnBtnLogon() 
{
HRESULT hr;
UpdateData();
CString	strServer = _T("Driver={SQL Server};Server=TEST\\TEST;"  "Trusted_Connection=no;" "Database=ATMServer1;Uid="+m_strUsrName+";Pwd="+m_strPwd+";");
hr = m_pDatabase->OpenConnection(strServer.AllocSysString(),m_strUsrName.AllocSysString(),m_strPwd.AllocSysString(),0);
		if (SUCCEEDED(hr))
	{
		
		MessageBox("Вошел на SQL.", "Login");

	}
	else
		MessageBox("Не вошел.", "Login");		
}	

void CClientDlg::OnBtnLogout() 
{
	// TODO: Add your control notification handler code here
	m_pDatabase->LogOut();

}



всё работает НО

При нажатии на >LogOut(); она вырубает все соединения на SQL сервере

Т.е. к нему в настоящее время подключены 5 соед-й разных пользователей
Кто нибудь один если нажал на >LogOut() то все соединения отключаются. Где я сделал промажку где не так.. подскажите

Прошу привести наглядный пример....
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / HELP! помогите правильное подключение и отключение через DCOM/COM Клиент/Сервер / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]