LOB (Line of Business) applications are enterprise level business application software which are critical to running complex processes. A LOB application has generally simple UI but has big and complex OLTP processing going on.
- An LOB (line-of-business) application is one of the set of critical computer applications that are vital to running an enterprise, such as accounting, supply chain management, and resource planning applications. LOB applications are usually large programs that contain a number of integrated capabilities and tie into databases and database management systems.
It’s an important architectural pattern to keep the size of your initial ZAP file minimal to provide a fast initial loading experience to the user. To make this happen Silverlight provides facilities so that you can load assemblies as and when required.
This should be the Architectural Design of your app:
Make your application modular and divide it in smaller assemblies.
Load required assemblies when required
Tip: You can also load built in assemblies at run time on demand. For example toy can load Dot Net assembly
I have written a walkthrough tutorial. You need Visual Studio 2010 express (or higher) and Silverlight 4.0 installed.
The example app loads an assembly called SilverlightLibrary.dll when the user clicks a text block. This example uses a relative URI to load the assembly from the same location as the application XAP file. It can be loaded from other locations as well.
This example uses the WebClient class to initiate an asynchronous download of the assembly in response to a user mouse click. When the download is complete, the AssemblyPart class is used to load the assembly.
1. Setup the project
Create a New Silverlight application and Name it : LoadingAssemblyOnDemand
2. Click ok when the following prompt pops up:
3. Now you have two projects in your solution, one is Silverlight App and another is a webApp to host this Silverlight App as seen in the Solution explorer below
4. Add the following elements into your MainPage.xaml. This will build up our basic GUI. Clicking on the Text block will initiate the process of dynamic loading on demand.
<StackPanel
x:Name="stackPanel">
<TextBlock>Page from Host
Application</TextBlock>
<TextBlock
MouseLeftButtonUp="TextBlock_MouseLeftButtonUp"
Cursor="Hand">
Click Here to Display a UI from the Library
Assembly
</TextBlock>
</StackPanel>
As seen in the screen shot below:
5. This will create a simple UI which you can see in the design view.
6. Now open the code window (MainPage.xaml.cs) and add the following code to the class.
privatevoid TextBlock_MouseLeftButtonUp(
object sender, MouseButtonEventArgs e)
{
// Download an "on-demand" assembly.
WebClient wc = new WebClient();
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
wc.OpenReadAsync( new Uri("SilverlightLibrary.dll", UriKind.Relative));
// Convert the downloaded stream into an assembly that is
// loaded into current AppDomain.
AssemblyPart assemblyPart = new AssemblyPart();
assemblyPart.Load(e.Result);
DisplayPageFromLibraryAssembly();
}
}
privatevoid DisplayPageFromLibraryAssembly()
{
// Create an instance of the Page class in the library assembly
SilverlightLibrary.SilverlightPage page = new SilverlightLibrary.SilverlightPage();
page.ShowMessage("Welcome");
}
7. Add a new project of type Silverlight Class Library to the Solution. Name this Project as SilverlightLibrary Now the solution has three projects as shown below:
8. Add a class to this newly added class library project. name this Class as SilverlightPage.cs, as shown above.
9. Add a simple method to this class named – ShowMessage and the code as shown below-
publicvoid ShowMessage(string messsage)
{
MessageBox.Show(messsage);
}
So when the user will click on the text block in the Silverlight app, this assembly and this class (SilverlightPage) will be dynamically loaded and this method can be called on the class object.
10. Now build this Class Lib project as shown below: (Right Click on the Project Node and Click on Build)
11. Now you have to add reference of this class lib into your Silverlight app. (For this expand the Silverlight App Project Node, right Click on References Node and Click Add Reference…)
12. Add reference dialog box opens. Click on the Project Tab and select the SilverlightLibrary (Class lib), click Ok) as shown below-
13. You will see a Reference of the Class lib added to the References Node Of the project as shown below-
14. Right Click on the SilverlightLibrary Node of the references as shown below and Click on Properties
15. Properties dialog box opens. Set the Copy Local property to False, as shown below and then save the project and solution.
16. Now build the Silverlight App.
17. We also need to copy the compiled DLL file of the class lib to the Client Bin Folder of the web project (On-Demand-Assembly-Loading.Web). So navigate the Solution Folder and then web Project folder and the Bin folder> For me the path was like this: C:\Users\SUMIT\Documents\Visual Studio 2010\Projects\On-Demand-Assembly-Loading\SilverlightLibrary\Bin\Debug
Copy two files from here (SilverlightLibrary.dll and SilverlightLibrary.pdb) and paste it to the Client Bin Folder of the Web Project. My Web project looks something like this after doing this-
18. Now we are done, So run the Silverlight Application. this will open the Default test page in the browser. We need to test whether the SilverlightLibrary assembly is being loaded dynamically at runtime. Firebug in Firefox can help us in this. Open FF and Open the Firebug pane. Enable Net tab in firebug to see the network traffic. Load the test page in Firefox and examine the traffic.
See after the first loading of the page, the XAP file loads that takes 4.3 KB of traffic. The SilverlightLibrary assembly has not been loaded till now. There are total 5 http requests making a total of 15.3KB. See below-
19. Now Click on the TextBlock to fire up the dynamic loading process.
A welcome message box pops up this means the dynamic code is executed. See, there are now six http request and Total is now 19.3KB.
20. When you expand the last (sixth request) you will see the name of the SilverlightLibrary.dll assembly. This was loaded dynamically when user clicked on the text block.
So this walkthrough helps us to understand the complete process of making our Silverlight Application modular and help us load the assemblies dynamically at runtime from the server.
Pls. put your comments or any questions. i shall love to answer you.
Two important security technologies, Data Execution Prevention (DEP) and Address Space Layout Randomization (ASLR), go a long way toward preventing unauthorized programs from taking over a PC. And Secunia Research just published a white paper with a disturbing analysis of popular Windows programs that don't use either. Windows XP Service Pack 2 introduced DEP back in 2004. It's is a technique that uses both hardware and software to keep a PC from executing programs that sit in areas that should be holding data. Historically, one of the easiest and most fruitful ways to take over a PC involves a buffer overflow - where an attack routine sticks a malicious program inside a data area and then tricks Windows into "running" the data. When a program asks Windows for DEP protection, and the hardware supports DEP, buffer overflow attacks are considerably more difficult. Not impossible, mind you, but DEP does pretty well blocking the most common and straightforward attacks.
ASLR arrived with the release of Windows Vista in 2007. When a program tells Windows that it wants to use ASLR, Windows sticks pieces of the program in randomly assigned parts of memory. If an attacker tries to access a specific location in the program, the attacker has to guess the location of the pertinent piece of the program, which can be quite difficult. Together DEP and ASLR aren't invincible, but they're formidable. In Windows 7 (and to a lesser extent Vista), turning on both DEP and ASLR is reasonably easy if the program is written properly and doesn't use certain undesirable coding techniques that fell out of favor years ago. That's why it's so shocking that many of the programs you and your users run every day don't support either or both.
Secunia tested sixteen applications - the most commonly used Windows apps as reported by Secunia's PSI scanning program. Each of the tested programs has been used as the vector in a real attack in the past two years. As of last month, none of these programs use DEP: Sun's Java JRE, Apple's QuickTime, Apple's iTunes (running on Win XP), OpenOffice, Google's Picasa, Foxit Reader, VLC Media Player, AOL's Winamp, and RealPlayer. Secunia determined that if a program doesn't use DEP, there's no reason to check for ASLR - kind of a security crawl-before-you-can-walk situation.
Today I came to know one of the best network protocl analyzer called : wireshark.
According to it’s site :
Wireshark is the world's foremost network protocol analyzer, and is the de facto (and often de jure) standard across many industries and educational institutions.
Features
Wireshark has a rich feature set which includes the following:
Multi-platform: Runs on Windows, Linux, OS X, Solaris, FreeBSD, NetBSD, and many others
Captured network data can be browsed via a GUI, or via the TTY-mode TShark utility
The most powerful display filters in the industry
Rich VoIP analysis
Read/write many different capture file formats: tcpdump (libpcap), Pcap NG, Catapult DCT2000, Cisco Secure IDS iplog, Microsoft Network Monitor, Network General Sniffer® (compressed and uncompressed), Sniffer® Pro, and NetXray®, Network Instruments Observer, NetScreen snoop, Novell LANalyzer, RADCOM WAN/LAN Analyzer, Shomiti/Finisar Surveyor, Tektronix K12xx, Visual Networks Visual UpTime, WildPackets EtherPeek/TokenPeek/AiroPeek, and many others
Capture files compressed with gzip can be decompressed on the fly
Live data can be read from Ethernet, IEEE 802.11, PPP/HDLC, ATM, Bluetooth, USB, Token Ring, Frame Relay, FDDI, and others (depending on your platform)
Decryption support for many protocols, including IPsec, ISAKMP, Kerberos, SNMPv3, SSL/TLS, WEP, and WPA/WPA2
Coloring rules can be applied to the packet list for quick, intuitive analysis
Output can be exported to XML, PostScript®, CSV, or plain text