Parece que hay mucha enemistad contra DCOM, y tengo curiosidad por comprender por qué. Para una empresa que todavía está escribiendo en Win32 SKD usando C++, ¿hay alguna razón real para no usar DCOM en el desarrollo actual o futuro? ¿Alguna versión futura de Windows no lo va a soportar? ¿Es demasiado frágil y no funciona a menudo? ¿Es demasiado complicado de implementar en comparación con otras tecnologías? ¿Cual es el trato?¿Qué pasa con DCOM?
Respuesta
Bueno, DCOM es una versión distribuida de COM y COM es muy complejo por sí mismo y es muy fácil hacer algo incorrecto involuntariamente (ver this recent question y la respuesta para ejemplos). Con DCOM solo tienes más formas de hacerte daño.
Aparte de eso, funciona y es, por ejemplo, una buena forma de alojar componentes COM en proc en un proceso separado.
De hecho, encuentro que COM es bastante comprensible y bastante simplista si entiende los punteros y los contadores de referencia. – Charles
Créame, las funciones de miembros desconocidas son solo el comienzo. Luego vienen apartamentos, concurrencia y otras cosas que pueden causar un dolor horrible. – sharptooth
Entonces, ¿qué recomendaría para un servicio local de win32 solo SDK y aplicación de cliente que necesita comunicarse? Sí DCOM es complicado, pero ¿qué tecnología no cumple estos requisitos? – Charles
Implementé un sistema grande usando DCOM a fines de los 90's. Aunque funcionó bastante bien, hubo un par de problemas. Para empezar, utiliza números de puerto impredecibles para la comunicación. No es escalable, y es mucho mejor usar WCF que DCOM.
Desafortunadamente, estamos confinados al SDK de Win32, no se permite .NET.Lo sé, lo sé, pero no establezco las reglas. – Charles
Aún así, creo que podrías usar servicios web. Estoy bastante seguro de que hay paquetes SOAP para C++. –
Si intenta crear una aplicación de servidor cliente y desea que la comunicación traspase los límites de la red (por ejemplo, Internet), entonces DCOM puede ser problemático debido a los cortafuegos.
Trabajé en una aplicación de servidor muy exitosa que se distribuyó utilizando DCOM, dejamos que el sistema maneje la mayor parte de la complejidad al crear aplicaciones COM + Server y exportar Application Proxies. En este caso, funcionó muy bien siempre que todas nuestras versiones estuvieran sincronizadas.
Olvidé mencionar que nuestro cliente y el servidor serían locales en la misma máquina, ambos escritos por nosotros y desplegados juntos, por lo que no hay problemas de red o sincronización. – Charles
Creo que el impulso se ha desplazado a SOAP y otras tecnologías de servicios web, ya que es:
- más fácil de implementar sistemas en presencia de cortafuegos
- sin dependencia de un proveedor
I Nunca utilicé DCOM, así que no puedo comentar sobre su calidad general o estado físico.
Supongo que debería haber mencionado que mi uso sería para DCOM local, tanto cliente como servidor en la misma máquina. Convirtiendo todo en ASCII y luego envolviéndolo con más etiquetas ASCII, entonces el análisis del resultado ASCII es extremadamente ineficiente. – Charles
Ah, te escucho. Y sí, SOAP tiene sus propios problemas. – CBFraser
No me gusta COM/DCOM porque "Catastrophic failure"
es el mensaje de error más inútil en el historial de mensajes de error.
Ese sería el mensaje de "sentirse bien" para el usuario. De esta forma, saben que lo están haciendo bien. – Jrud
ERROR_ALREADY_EXISTS para resumir. – ActiveTrayPrntrTagDataStrDrvr
- Modelo de seguridad. Especialmente cuando las computadoras no están en el mismo dominio (o no están en absoluto en el dominio).
- Interfaces automáticas modeladas para Visual Basic (original, no .NET), obsoletas y no bonitas para usar desde otros idiomas.
Si solo desea desarrollar en C++ y desplegar en red controlada, aún puede ser una buena opción.
Los problemas de seguridad en los límites del sistema operativo local (cualquier cosa en otra máquina) no se pueden enfatizar lo suficiente. La "administración" de la seguridad DCOM es completamente imposible. (Y buena suerte tratando de localizar errores o interpretar mensajes de error). –
- 1. ¿Qué pasa con const?
- 2. ¿Qué pasa con gemspec?
- 3. ¿Qué pasa con gethostbyname?
- 4. DCOM: CoCreateInstanceEx devuelve E_ACCESSDENIED
- 5. TemplateBinding con convertidor: ¿qué pasa?
- 6. ¿Qué pasa con setScaleX/setScaleY?
- 7. ¿Qué pasa con `std :: set`?
- 8. ¿Qué pasa con las encuestas?
- 9. ¿Qué pasa con DateTime.Parse (myString)?
- 10. T_INLINE_HTML? ¿Qué pasa con esto?
- 11. ¿Qué pasa con [UITableView reloadData]?
- 12. ¿Qué pasa con mi scala.swing?
- 13. ¿Qué pasa con este URI?
- 14. ¿Qué pasa con static_cast con múltiples argumentos?
- 15. ¿Qué pasa con este fragmento de código?
- 16. ¿Qué pasa con el objeto DateTime?
- 17. ¿Qué pasa con mi copia aquí?
- 18. ¿Qué pasa con mi XPath/XML?
- 19. ¿Qué pasa con este ciclo while?
- 20. ¿Qué pasa con LINQ to EF?
- 21. ¿Qué pasa con la clase System.Linq.Expressions.LogicalBinaryExpression?
- 22. ¿Qué pasa con mi código X11?
- 23. ¿Qué pasa con mi cliente Apache CXF?
- 24. ¿Qué pasa con el método jQuery Live?
- 25. ¿Qué pasa con los parámetros de salida?
- 26. ¿Qué pasa con este programa C
- 27. ¿Qué pasa con Linq a SQL?
- 28. ¿Qué pasa con mi matriz de bash?
- 29. ¿Qué pasa con mi archivo app.config?
- 30. ¿Qué pasa con los colores WebSafe?
todo;) (Es una broma) –