[C#] Silverlight, Wpf Web App (xbap) or Click Once? Pros and Cons


Answers

You didn't say if this is a company only application or a public facing one. That alone will decide it for you.

If company only, I would go with full WPF click once. This will give you everything. Full framework should not be an issue. It's a one time install running in the background so it's not something that your decision should depend on. Cons: it runs in Windows only but if your company is Windows only, this should not be an issue.

However WPF apps could be resource hungry so you need to know if all your client machines are capable of running WPF apps smoothly.

If it's an Internet app, go for Silverlight: it runs under different operating systems.

Question

We are starting a new project and I'm trying to decide which of the Wpf-esque develop/deploy strategies we should go with. In our case we are looking at quite a complex business app that will be used by 100s (not 1000s) of people, So I'm leaning towards a click-once app. My boss likes the idea of a Silverlight app as it means easier deployment. So which way should we jump?

The answer is, of course, "it depends". So what are the pros and cons of each?

I'll start the ball rolling (Edit Added in some answers from artur carvalho):


Silverlight

  • Pros

Cross browser
Doesn't require full framework.
Better control of users. If your users login, you dont have to worry with activation keys or similar stuff.
It works on Windows and Mac.
You can update all your users apps easily.

  • Cons

Can't interact with client's file system etc
Has less functionality compared with full Wpf (anyone got a good resource that documents differences?)
Single window
Single version


Wpf Web App (xbap)

  • Pros

Full Wpf.

  • Cons

Single browser
Requires full framework
Can't interact with client's file system etc
Single window
Single version


Wpf Click once

  • Pros

Full Wpf
Can work offline
Multiple windows
Multiple versions (con?)
Better access to low level parts of the computer
No downtime for maintenance

  • Cons

Single browser
Requires full framework
Slightly(?) harder to install.




WPF apps are traditional "desktop" apps. If you want a very similar experience on the web though, then use Silverlight.




Is there are any loading speed difference between Page and Window in WPF?

Pages are intended for use in Navigation applications (usually with Back and Forward buttons, e.g. Internet Explorer). Pages must be hosted in a NavigationWindow or a Frame

Windows are just normal WPF application Windows [lnk]

This is essentially an XBAP vs ClickOnce problem. Anything in a Page is compiled for and restricted by what WPF is permitted to do in a browser window. This precludes many low level computer operations that WPF Windows can get away with because they are compiled to run from the desktop. Window apps have full access to system resources.

Keep in mind that when you use a Page control, even during debugging, the generated code is build with a browser deployment in mind. All XBAPs are run in a restrictive security sandbox under partial trust. In other words, they are allowed to use certain .NET libraries but banned from accessing others. [ref] Some of these .NET libraries will be responsible for optimizations that therefore can't achieved in a browser deployment.

As such, it makes perfect sense that applications build in Windows would be able to perform most operations faster than apps built in Pages.




best solution for architecture of a enterprise web App, that use hardware & local resources & heavy data entry forms

Cleanest solution may be to go WPF for the presentation tier (silverlight will require an additional step to access the local machine) and click-once (just because you are considering click-once doesnt mean your server is now just a distribution mechanism, also correct me if im wrong but you can also include the .Net runtime as part of the click-once distribution package)

Also just because its WPF doesnt mean all your business logic needs to be downloaded with the client, id collect your business logic server side, at least the sensitive stuff and call it via wcf -with security of your choice-.

EDIT

Some useful links