I have installed and maintained a WeBWorK server at Towson. It is free both for the university and for the students, the open-source code was written, and is updated, by educated enthusiasts, there is a huge (and growing) databank of homework problems. The system allows not just multiple-choice answers, but is able to correctly grade free-form mathematical input that uses essentially the same syntax as graphing calculators. The students receive immediate feedback on their work. This means that if the answer is incorrect, the students have to keep working on the problem. The system automatically randomizes the numbers (or other elements) of problems. This means that different students get similar, but not identical problems. This encourages meaningful exchanges between the students.
As you can see from the syllabi of the courses that I teach with WeBWorK, I do assign, and grade, written homework in addition to web-based exercises. The written homework problems are typically more conceptual and require more writing. Separating the routine exercises as web-homework allows me to focus more on those problems.
Let me mention some technical details. In my experience, installation manuals were informative, the system needs minimal up-keep, and is very "light". (So light, in fact, that I was able to run it on a virtual machine inside an old Dell box discarded by the Computer Science Department.) Most problems that I had trace to internal network and server administration issues.