I’m working on a project where I’m developing a pseudo Unified Communications middle tier solution (Presence & Call Control) utilizing Genesys as a backend which is a CTI solution provider(www.genesyslab.com). The front end of the solution could be a web based application (Prefer not to use ActiveX although my company is a Microsoft shop)
Genesys uses socket based communication and communication is asynchronous. For example I send a request to place a phone call to Genesys and Genesys responds with an event indicating that the phone call is being dialed, and established.
Based on my limited experience with n-tier design, what I’m envisioning so far is a windows service to handle the socket communication to Genesys and maintain state of all call activity in the environment. Next I see a WCF service communicating to the windows service to provide details about call state to web based clients (using basic or ws binding). This would allow me to get out of using ActiveX, but would require polling so most likely I would have multiple WCF instances with load balancing to share the load.
Am I on the right track? Can WCF communicate to a windows service as well as provide service to clients? Any other architectural approach suggestions would be greatly appreciated!
Best regards,
Jason
You could certainly implement a WCF “gateway” service that exposes the CTI protocol implementation as a WCF-friendly SOAP web service. If the CTI protocol depends on stateful connections, this could be tricky to implement as a stateless SOAP web service. However, depending on your choice of client-side technology, this might not be necessary.
An ActiveX control has the same permissions as the logged on user. So it could create TCP/IP or UDP socket connections to the CTI back end, avoiding the need for WCF altogether.
If you use Silverlight (which I would highly recommend over ActiveX) then you would need the Silverlight application to have elevated trust in order to create socket connections on arbitrary ports. Ordinarily, a Silverlight application can only create socket connections on ports 4502-4534, but a Silverlight application with elevated trust can use any port.
Silverlight generally has a better “reputation” than ActiveX, but in reality, both ActiveX and Silverlight will require your clients to trust you enough to install something.