title: best solution for architecture of a enterprise web App, that use hardware & local resources & heavy data entry forms
body: <p>we have an APP, that uses many local resources, such as windows printing API, windows registry, some Active X to connect to POS devices(to pay money &amp; get receipt, the price is sent from APP), Barcode printer to print labels, RFID devices to read &amp; write some data. The application is written with .Net framework 3.5, and uses some new features of .Net framework (e.g.: WCF). The forms in app are very heavy forms(7 of them are essential), in each form, there are over 100 Textboxes, combos, radio buttons, panels &amp; many other controls, that according to need of user are shown or hidden, disabled or enabled, filled &amp; cleared, many many times.</p>
  
  <p>After the user does the work, prints most be sent to previously selected printer automatically, labels most be printed by barcode printer, RFID &amp; POS devices are called if neede.</p>
  
  <p>The problem is that now we need a web base version of this. the reason is that there are an administration department who needs to be aware of any transactions online (there is a dashboard software). In the WIN APP version, we use WCF to send &amp; receive new data (something like replication happens).</p>
  
  <p>According to my searches, there are 3(even 4), way to accomplish this goal, as below.</p>
  
  <ol>
  <li><p><strong>Using WPF technology</strong></p></li>
  <li><p><strong>Using Clickonce</strong></p></li>
  <li><p><strong>Using Pure html + Active X(meaning asp.net, very heavy javascript &amp; Write Active X)</strong></p></li>
  <li><p><strong>Hosting windows forms controls in IE</strong></p></li>
  </ol>
  
  <p><strong>WPF’s XBAP</strong> is good, but:
  It needs to download all dll’s to local machine &amp; then start the application. This also happens every time a new version is uploaded to server. The sizes of dll’s are about 5meg.
  Also there is a risk that a user can disassemble the dll’s. Also we need to sign the assemblies in order to be able to use win API’s, and the user need to add the site to its secure site.</p>
  
  <p>The main disadvantage is that WPF is not actually in Web architecture, I mean, dll’s do calculations on client side &amp; the server is only responsible for saving entities (&amp; does some validations). 
  refer to <a href="https://stackoverflow.com/tags/web-applications/info">https://stackoverflow.com/tags/web-applications/info</a></p>
  
  <p><strong>Clickonce:</strong>
  No idea at all, we can deploy App(the WPF version or windows forms version) as a clickonce app, but the server is only responsible for updating new versions of software.</p>
  
  <p><strong>Pure web &amp; HTML + Active X</strong>:
  This is the time consuming work, everything seems to be ok, but actually we need to be JQuery &amp; AJAX masters &amp; I think most of time is spent on debugging javascript. Also only IE can run the App @ all, because of Active X controls in page.</p>
  
  <p><strong>Winform in IE</strong>:
  Not a good choice at all, but we can do this, the output is works only in IE, also the rendered UI, is in very bad style.</p>
  
  <p><strong>There is also another way</strong>, may be a hack, when we develop with pure web, we can write some WCF services to do the hardware part(commiunicating with hardware, local resources &amp; other things) &amp; install them on clients(run for example with cassini). So when we need for example to work with hardware &amp; local resources(POS, RFID, Registry &amp; others), we can call them from our site with the web service call(that points to local host).</p>
  
  <p>Which of these are good choice &amp; what? 
  Is there any other solution?
  any idea can help.</p>
  
  <p><strong>many thanks</strong>.</p>