|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
|
[C# + COM] programmazione avanzata
Ho un problemone che mi sta facendo impazzire
![]() Ho due programmi scritti in C# Client e server (comunicanti via Socket) che si appoggiano entrambi su un oggetto COM (la cosa avviene in maniera trasparente importandolo in VS.NET) che mi wrappa le funzionalità di pgp (encrypt, decrypt, sign e verify principalmente). Il client manda un messaggio al server firmato, il server risponde con un altro firmato, il cliente replica di nuovo con mess firmato e la comunicazione viene chiusa dal server con un altro mess firmato. Il problema è che se lancio i programmi debuggandoli step by step il protocollo funziona e giunge a termine. Se li lancio senza fare debug si inchiodano, nel senso che non portano a termine lo scambio di messaggi ed uno dei due rimane in attesa infinita di messaggi. Ho notato che il server (ho provato in varie maniere...) si ferma su una chiamata all'oggetto COM... quasi come se il COM non riuscisse a gestire la concorrenza... Non conosco l'architettura esatta degli oggetti COM... ![]() Vi sono infinitamente grato dell'aiuto... e se qualcuno mi risolve il problema gli offro pure una pizza in zona BO... ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
|
Altre prove e sempre più convinto di una conclusione... è problema del COM... è come se non riuscisse a gestire la concorrenza di più richieste da parte di clienti...
Ho provato a scrivere al programmatore che l'ha fatto e questa volta non mi risponde (per adesso)... mentre in passato l'ha fatto... Comunque ho trovato un bruttissimo accrocchio che in teoria (se il problema è effettivamente questo) dovrebbe risolvere il problema: - faccio un server .net remoting locale con la stessa interfaccia del COM (così domani se il COM dovesse essere corretto è sufficiente cambiare la using...) - faccio le richieste a questo server che implicitamente serializza le richieste concorrenti... Problemone di fondo: le richieste passano in chiaro (serializzate ma non certamente criptate) sul computer locale, questo significa che la pwd è estraibile... vabbé... siccome è un progetto universitario potrei scendere a questo compromesso e spiegare i problemi incontrati... Consigli o pareri sono bene accetti Ultima modifica di soalle : 28-10-2003 alle 13:03. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
|
Immagino non interessi a nessuno ma ci provo...
![]() Alla fine il problema era che l'oggetto COM non gestiva la concorrenza di più richieste fatte da più processi (non so se è un problema del COM stesso o dell'infrastruttura .NET per l'interfacciamento a COM...) Ho risolto realizzando un server remoting che espone un oggetto che wrappa il COM e avente la stessa interfaccia del COM. In questo modo nei processi client ho inserito il codice per andarsi a prendere l'oggetto dal server remoting e il tutto è stato risolto... Risolto grazie alla struttura intrinseca di remoting (SINGLETON non Single call) che serializza le chiamate derivanti dai processi... è chiaro che avrei potuto realizzare il tutto senza remoting... ma così è stato molto più facile perché ho dovuto cambiare ben poco nei processi clienti... ![]() Vabbé.... pensare alla settimana che ho perso per capire che era il COM che non funzionava... ![]() ![]() ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:23.