powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / HELP! помогите правильное подключение и отключение через DCOM/COM Клиент/Сервер
1 сообщений из 1, страница 1 из 1
HELP! помогите правильное подключение и отключение через DCOM/COM Клиент/Сервер
    #38727784
Кузнец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правильное подключение и отключение через 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
1 сообщений из 1, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / HELP! помогите правильное подключение и отключение через DCOM/COM Клиент/Сервер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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