You are on page 1of 81

Page 18 of 397

Introduction
Dedication
This book is dedicated to my kids Sanjana and Simran, whose dads play time has been stolen and given to this book. I am thankful to my wife for constantly encouraging me and also to BPB Publication to give new comer a platform to perform. Finally on top of all thanks to the two old eyes my mom and dad for always are blessing me. I am blessed to have Raju as my brother who always keeps my momentum moving on. I am grateful to Bhavnesh Asar who initially conceptualized the idea I believe concept thinking is more important than execution. Thanks to Shaam for all the effort. It was his tiresome three months of continuous writing that we have finally made it. Tons of thanks to my reviewers whose feedback provided an essential tool to improve my writing capabilities.

About the author


Author works in a big multinational company and has a good experience in software industry. He is working presently as project lead and in past has led projects in banking, travel and financial sectors. But on top of all, I am a simple developer like you all guys there doing an 8 hour job. Writing is something I do extra and I love doing it. No one is perfect and same holds true for me .So anything you want to comment, suggest, and point typo / grammar mistakes or technical mistakes regarding the book you can mail me at shiv_koirala@yahoo.com. Believe me guys your harsh words would be received with love and treated to the top most priority. Without all you guys I am not an author. Writing an interview question book is really a great deal of responsibility. I have tried to cover maximum questions for the topic because I always think probably leaving one silly question will cost someones job there. But huge natural variations in an interview are something difficult to cover in this small book. So if you have come across such questions during interview which is not addressed in this book do mail at shiv_koirala@yahoo.com .Who knows probably that question can save some other guys job.

Features of the book


Around 500 plus interview questions from live .NET interviews. Covers all old and new frameworks like .NET 1.0, 1.1, 2.0, 3.0 and 3.5. We have captured every action of the framework. We have provided a excel sheet which can help you measure how much you are ready for .NET interviews. Every question is classified in to Basic, Intermediate and advanced category, thus providing more focus to readers on specific category. Covers latest technology like Reporting services, Ajax, WCF, WPF and WWF. During interviews other than main technology (.NET, JAVA etc.) companies expect other areas to be strong for example UML, Architecture, Database etc. Other sections are the most strong point of the book, which makes reader prepared for the unexpected questions.

Page 19 of 397 Full range of interview questions right from junior .NET developers to senior architects or project manager. CD has sample resume, sample dummy project and sample code to understand fundamentals. Book covers important points like salary negotiations, resume making and general points to be remembered during interview. Recommended for .NET interviewers who are looking for what questions to be asked to get better and decent .NET professionals Recommended for Fresher and students who want to have a feel of what .NET questions are asked in multinational companies. Developers who are looking for Quick reference and FAQ.

I am sure after reading this book reader will have extra confidence and a better approach for .NET interviews.

Foreword
Changing job is one of the biggest events for any IT professional. When he starts the search he realizes that he needs much more than actual experience. Working on a project is one thing and cracking an interview is a different ball game, many may differ on this but thats my personal opinion. When you work on a project you are doing a routine job and you tend to forget the basic fundamentals. For instance you are working on a highly technical project which uses remoting majorly in the project, its very much possible that you can fail in simple ADO.NET questions because you are completely out of touch with it. We all know failing in simple ADO.NET questions will not even clear your first round. It does not mean you do not know the fundamentals; its only that you need to revise the same. This book will give you bird eye view of what is needed in .NET interviews. It will help you in doing quick revision so that you can be ready for the interview in day or two. The best way to read this book is not from start to end rather just read the index and then go in details if needed. When the first edition of this book was written, we never knew it will become such a success. As .NET framework grew so this book. We hope to grow stronger with every version and release of .NET. This book covers the other aspect of .NET interviews by providing chapter like Architecture, UML, Reporting services, Ajax, SQL SERVER, Project Management, General Interview questions etc. Its really good to see emails saying We got a job, just makes us feel better, please do write to us on shiv_koirala@yahoo.com .I hope this book takes you to a better height and gives you extra confidence boost during interviews. Best of Luck and Happy Job-Hunting.............

Career path Institute


We are proud to announce that we have opened our own computer institute in Mumbai. We take courses for both corporate as well as freshers.Shivprasad Koirala himself conducts these courses, please mail shiv_koirala@yahoo.com for further details.

Page 20 of 397

Main differences between .NET 1.1, 2.0, 3.0 and 3.5


We just thought we should first start with the most asked question, differences between all framework versions. Below figure '.NET growth' shows how the framework has evolved. In .NET 1.1 we had the basic framework, web services, CLR, ADO etc...NET 2.0 paid more attention on increasing the productivity of the developer. They had modules like MARS, Generics, Partial classes, DPAPI etc...NET 3.0 was more about fulfilling the SOA dreams. They had modules like WCF, WPF and WWF. We have complete chapter on 3.0 please read it to understand the fundamentals..NET 3.5 has new query capabilities like LINQ, AJAX which is now an integral part of 3.5 setup and new protocol support for WS-* specifications.

Figure 0.1 : - .NET Growth

Note: - We are really proud to be a small part of this growth story. Hope Microsoft grows and also this book.

How to read this book


If you can read English, you can read this book...kidding. There are some legends, which will make your reading more effective. Every question has simple tags, which mark the rating of the questions.
These rating are given by Author and can vary according to companies and individuals.

(B) Basic Questions


Basic Grade means according to the interviewer its a fundamental question and should be answered. Example What is a CLR? Guys stumbling on this question will rarely pass interviews.

(I) Intermediate Questions


These are Mid-level questions and will be expected to be answered if you are looking for a decent position in the company.

Page 21 of 397

(A) Advanced Questions


These are advanced level question which are expected when they are looking for specialist in the field.

* Marked Questions
These are general questions asked in IT world. Example Whats your expectation? You will see this question is as you keep reading. There are no direct answers to these question but they do affect a lot during job search. Be ready with some decent answers.

Note
While reading you can come across section marked as Note, which highlight special points of that section.

Software Company hierarchy

Page 22 of 397
Figure :- 0.2 IT Company hierarchy

Its very important during interview to be clear about what position you are targeting. Depending on what positions you are targeting the interviewer shoots you questions. Example if you are looking for a project manager position you will be asked around 20% technical questions and 80% management.
Note: - In small scale software house and mid scale software companies there are chances where they expect a PM to be very much technical. But in big software houses the situations are very much different, interview are conducted according to positions.... Unless the interviewer changes the rule.

Above is a figure of a general hierarchy across most IT companies.


Note: - There are many small and medium software companies which do not follow this hierarchy and they have there own adhoc way of defining positions in the company.

So why is the need of hierarchy in a interview.

Interview is a contract between the employer and candidate to achieve specific goals.
So employer is looking for a suitable candidate and candidate looks for a better career. Normally in interviews, the employer is very clear about what type of candidate he is looking for. However, 90% times the candidate is not clear about the positions he is looking for. How many times it has happened with you that you have given a whole interview and when you mentioned the position you are looking for...pat comes the answer, we do not have any requirements for this position. So be clarified about the position right from when you start the interview. Following are the number of years of experience according to position. Junior engineers are especially freshers and work under software engineers. Software engineers have around 1 to 2 years of experience. Interviewer expects software engineers to be technically at a medium level. Senior Software Engineers have around 2 to 4 years of experience. Interviewer expects them to technically be very strong. Project leads should handle majority technical aspect of project and should have around 4 to 8 years of experience. They are also indirect architect of the project. Interviewer expects them to be technically strong so that they can drive the architecture part of the project. Interviewer also expects them to have people management skills. Project Manager are expected to be around 40% technically strong and should have experience above 10 years plus. But they are more interviewed from aspect of project management, client interaction, people management, proposal preparation etc.

So now judge where you stand, and where you want to go..........

Resume Preparation Guidelines


First impression the last impression

Page 23 of 397
Note : - A sample resume is provided in SampleResume folder.

Before even the interviewer meets you he will first meet your resume. Interviewer looking at your resume is almost a 20% interview happening with out you knowing it. I was always a bad guy when it comes to resume preparation. But when I looked at my friends resume they where really good. Now that I am writing series of book on interviews I thought this will be a good point to put in. You can happily skip it if you are confident about your resume. There is no hard and fast rule that you have to follow the same pattern but just see if these all check list are attended. Use plain text when you are sending resumes through email. For instance you sent your resume using Microsoft word and what if the interviewer is using Linux he will never be able to read your resume. You can not be sure both wise, you sent your resume in Word 2000 and the guy has Word 97uuhhh. Attach a covering letter it really impresses and makes you look traditionally formal.Yes, even if you are sending your CV through email send a covering letter.

Check list of content you should have in your resume : Start with an objective or summary, for instance, Working as a Senior Database administrator for more than 4 years. Implemented quality web based application. Follow the industrys best practices and adhered and implemented processes, which enhanced the quality of technical delivery. Pledge to deliver the best technical solutions to the industry. Specify your Core strengths at the start of the resume by which the interviewer can make a quick decision are you eligible for the position. For example :o Looked after data mining and data warehousing department independently. Played a major role in query optimization. o Worked extensively in database design and ER diagram implementation. o Well versed with CMMI process and followed it extensively in projects. o Looking forward to work on project manager or senior manager position. This is also a good position to specify your objective or position which makes it clear to the interviewer that should he call you for an interview. For instance, if you are looking for senior positions specify it explicitly looking for this job profile. Any kind of certification like MCP, MCSD etc you can make it visible in this section. Once you have specified briefly your goals and what you have done its time to specify what type of technology you have worked with. For instance RDBMS, TOOLS, Languages, Web servers, process (Six sigma, CMMI). After that you can make a run through of your experience company wise that is what company you have worked with, year / month joining and year / month left. This will give an overview to the interviewer what type of companies you have associated your self.

Now its time to mention all your projects you have worked till now. Best is to start in descending order that is from your current project and go backwards. For every project try to put these things: Project Name / Client name (Its sometimes unethical to mention clients name; I leave it to the readers).

Page 24 of 397 Number of team members. Time span of the project. Tools, language, RDBMS and technology used to complete the project. Brief summary of the project.

Senior people who have huge experience will tend to increase there CV with putting in summary for all project. Best for them is to just put description of the first three projects in descending manner and rest they can say verbally during interview. I have seen CV above 15 pages I doubt who can read it. Finally comes your education and personal details. Trying for onsite, do not forget to mention your passport number. Some guys tend to make there CV large and huge. I think an optimal size should be not more than 4 to 5 pages. Do not mention your salary in CV. You can talk about it during interview with HR or the interviewer. When you are writing your summary for project make it effective by using verbs like managed a team of 5 members, architected the project from start to finish etc. It brings huge weight, This is essential very essential take 4 to 5 Xerox copies of your resume you will need it now and then. Just in case take at least 2 passport photos with you. You can escape it but many times you will need it. Carry all your current office documents specially your salary slips and joining letter.

Salary Negotiation
Ok thats what we all do it for MONEY not everyone but still money means a lot. This is probably the weakest area for techno savvy guys. They are not good negotiators. I have seen so many guys at the first instance they will smile and say NEGOTIABLE SIR. So here are some points:

Do a study of what is the salary trend? For instance have some kind of baseline. For example what is the salary trend on number of year of experience? Discuss this with your friends out. Do not mention your expected salary on the resume? Let the employer first make the salary offer. Try to delay the salary discussion till the end. If they say what you expect? Come with a figure with a little higher end and say negotiable. Remember never say negotiable on something which you have aimed, HR guys will always bring it down. So negotiate on AIMED SALARY + some thing extra. The normal trend is that they look at your current salary and add a little it so that they can pull you in. Do your home work my salary is this much and I expect this much so whatever it is now I will not come below this.

Page 25 of 397 Do not be harsh during salary negotiations. Its good to aim high. For instance I want 1 billion dollars / month but at the same time be realistic. Some companies have those hidden cost attached in salary clarify it rather to be surprised at the first salary package. Many of the companies add extra performance compensation in your basic which can be surprising at times. So have a detail break down. Best is to discuss on hand salary rather than NET or CTC. Talk with the employer in what frequency does the hike happen. Take everything in writing, go back to your house and have a look once with a cool head is the offer worth it of what your current employer is giving. Do not forget once you have job in hand you can come back to your current employer for negotiation. Remember the worst part is cribbing after joining the company that your colleague is getting more. So be careful while interview or be sportive to be a good negotiator in the next interview. One very important thing is that the best negotiation ground is not the new company where you are going but the old company which you are leaving. So once you have offer on hand get back to your old employee and show them the offer and then make your next move. Its my experience that negotiating with the old employer is easy than the new one.Frankly if approached properly rarely any one will say no as you have spent quiet a amount of time with them. Just do not be aggressive or egoistic that you have an offer on hand. Top of all some time some things are worth above money: - JOB SATISFACTION. So whatever you negotiate if you think you can get JOB SATISFACTION aspect on higher grounds go for it. I think its worth more than money.

Applicable to Only India


Years of experience
Freshers 1 to 2 yrs 3 to 4 yrs 4 to 6 yrs 6 to 8 yrs 8 to 10 yrs 10 to 15 yrs 15 yrs and above

Amount in Rupees CTC (Monthly)


8000 to 10000 15000 to 25000 30000 to 45000 45000 to 55000 60000 to 75000 75000 to 85000 90000 to 100000 100000 and above. Mostly depends on negotiations.

Table: - 0.3 Salary Card for India

We have taken bonus as a part of CTC.

Applicable to US Only

Page 26 of 397

Years of experience
Freshers 2 to 4 yrs 4 to 6 yrs 6 to 8 yrs 8 to 12 yrs 12 and above

Amount in Dollars (Yearly)


45000 to 55000 55000 to 60000 60000 to 65000 70000 to 80000 80000 to 90000 Depends on negotiations

Table: - 0.4 US Salary Card

Note: - The above Salary card is based on my experience and some talk which I had with my friends who are in IT industry. In case you are finding discrepancies please do mail me at shiv_koirala@yahoo.com probably we can standardize it better for the community.

The score card shown above is completely derived from authors experience and interaction he had in his circle. It is not an approved score card by any authorized body as such and should be taken only has bench mark to measure your success. Also note that these rates are applicable for medium and large software companies. Small company rate cards are very irregular and governed by a single owner of the company. So the above rate card is not applicable for small company. Many people do get mind blowing salaries even with small experience which again the score card does not reflect.

Points to remember
One of the first questions asked during interview is Can you say something about yourself? Can you describe about your self and what you have achieved till now? Why do you want to leave the current company? Where do you see yourself after three years? What are your positive and negative points? How much do you rate yourself in .NET and SQL Server in one out of ten? Are you looking for onsite opportunities? (Be careful do not show your desperation of abroad journeys) Why have you changed so many jobs? (Prepare a decent answer do not blame companies and individuals for your frequent change). Never talk for more than 1 minute straight during interview. Have you worked with previous version of SQL Server? Would you be interested in a full time Database administrator job?

Page 27 of 397 Do not mention client names in resume. If asked say that its confidential which brings ahead qualities like honesty When you make your resume keep your recent projects at the top. Find out what the employer is looking for by asking him questions at the start of interview and best is before going to interview. Example if a company has projects on server products employer will be looking for BizTalk, CS CMS experts. Can you give brief about your family background? As you are fresher do you think you can really do this job? Have you heard about our company? Say five points about our company? Just read at least once what company you are going for? Can you describe your best project you have worked with? Do you work on Saturday and Sunday? Which is the biggest team size you have worked with? Can you describe your current project you have worked with? How much time will you need to join our organization? Whats notice period for your current company? What certifications have you cleared? Do you have pass port size photos, last year mark sheet, previous companies employment letter, last months salary slip, pass port and other necessary documents. What is the most important thing that motivates you? Why you want to leave the previous organization? Which type of job gives you greatest satisfaction?

What is the type of environment you are looking for? Do you have experience in project management? Do you like to work as a team or as individual? Describe your best project manager you have worked with? Why should I hire you? Have you been ever fired or forced to resign? Can you explain some important points that you have learnt from your past project experiences? Have you gone through some unsuccessful projects, if yes can you explain why did the project fail? Will you be comfortable with location shift? If you have personal problems say no right at the first stage.... or else within two months you have to read my book again.

Page 28 of 397 Do you work late nights? Best answer if there is project deadline yes. Do not show that its your culture to work during nights. Any special achievements in your life till now...tell your best project which you have done best in your career. Any plans of opening your own software company...Beware do not start pouring your bill gates dream to him.....can create a wrong impression.

Interview rating Sheet


We have provided a self assessment rating sheet in the book for .NET, Java, Networking, Project management, Architecture, SQL Server and lot more. If you are able get 80 % in the assessment we are sure you can crack any Interview. You can find the assessment sheet in CD as an excel file (InterviewRating.xls). So take the self test again and again to improve your confidence.

Chapter 1: Basic .NET Framework


(B)What is an IL?
Twist: - What is MSIL or CIL, What is JIT?
(IL)Intermediate Language is also known as MSIL (Microsoft Intermediate Language) or CIL (Common Intermediate Language). All .NET source code is compiled to IL. IL is then converted to machine code at the point where the software is installed, or at run-time by a Just-In-Time (JIT) compiler.

(B)What is a CLR?
Full form of CLR is Common Language Runtime and it forms the heart of the .NET framework. All Languages have runtime and it is the responsibility of the runtime to take care of the code execution of the program. For example, VC++ has MSCRT40.DLL, VB6 has MSVBVM60.DLL, and Java has Java Virtual Machine etc. Similarly, .NET has CLR. Following are the responsibilities of CLR Garbage Collection: - CLR automatically manages memory thus eliminating memory leaks. When objects are not referred, GC automatically releases those memories thus providing efficient memory management. Code Access Security: - CAS grants rights to program depending on the security configuration of the machine. Example the program has rights to edit or create a new file but the security configuration of machine does not allow the program to delete a file. CAS will take care that the code runs under the environment of machines security configuration. Code Verification: - This ensures proper code execution and type safety while the code runs. It prevents the source code to perform illegal operation such as accessing invalid memory locations etc.

Page 29 of 397 IL (Intermediate language)-to-native translators and optimizers:- CLR uses JIT, compiles the IL code to machine code, and then executes. CLR also determines depending on platform what is optimized way of running the IL code.

(B)What is CTS?
In order that two language communicate smoothly CLR has CTS (Common Type System).Example in VB you have Integer and in C++ you have long these datatypes are not compatible so the interfacing between them is very complicated. In order that these two different languages communicate Microsoft introduced Common Type System. So Integer data type in VB6 and int data type in C++ will convert it to System.int32, which is data type of CTS. CLS, which is covered in the coming question, is subset of CTS.
Note: If you have undergone COM programming period interfacing VB6 application with VC++ application was a real pain as the datatype of both languages did not have a common ground where they can come and interface, by having CTS interfacing is smooth.

(B)What is a CLS (Common Language Specification)?


This is a subset of the CTS, which all .NET languages are expected to support. It was always a dream of Microsoft to unite all different languages in to one umbrella and CLS is one-step towards that. Microsoft has defined CLS, which are nothing but guidelines, that language should follow so that it can communicate with other .NET languages in a seamless manner.

(B)What is a Managed Code?


Managed code runs inside the environment of CLR i.e. .NET runtime. In short, all IL are managed code. However, if you are using some third party software example VB6 or VC++ component they are unmanaged code, as .NET runtime (CLR) does not have control over the source code execution of these languages.

(B)What is a Assembly?
Assembly is unit of deployment like EXE or a DLL. An assembly consists of one or more files (dlls, exes, html files etc.), and represents a group of resources, type definitions, and implementations of those types. An assembly may also contain references to other assemblies. These resources, types and references are described in a block of data called a manifest. The manifest is part of the assembly, thus making the assembly self-describing. An assembly is completely self-describing. An assembly contains metadata information, which is used by the CLR for everything from type checking an security to actually invoking the components methods. As all information is in the assembly itself, it is independent of registry. This is the basic advantage as compared to COM where the version was stored in registry. Multiple versions can be deployed side by side in different folders. These different versions can execute at the same time without interfering with each other. Assemblies can be private or shared. For private assembly deployment, the assembly is copied to the same directory as the client program that references it. No registration is needed, and no fancy installation program is required. When the

Page 30 of 397 component is removed, no registry cleanup is needed, and no uninstall program is required. Just delete it from the hard drive. In shared assembly deployment, an assembly is installed in the Global Assembly Cache (or GAC). The GAC contains shared assemblies that are globally accessible to all .NET applications on the machine.

(B) What are the different types of Assembly?


There are two types of assembly Private and Public assembly. A private assembly is normally used by a single application, and is stored in the application's directory, or a sub-directory beneath. A shared assembly is normally stored in the global assembly cache, which is a repository of assemblies maintained by the .NET runtime. Shared assemblies are usually libraries of code, which many applications will find useful, e.g. Crystal report classes that will be used by all application for Reports.

(B) What is NameSpace?


Namespace has two basic functionality: NameSpace Logically group types, example System.Web.UI logically groups UI related features. In Object Oriented world, many times it is possible that programmers will use the same class name. Qualifying NameSpace with class name can avoid this collision.

(C) What is Difference between NameSpace and Assembly?


Following are the differences between namespace and assembly: Assembly is physical grouping of logical units, Namespace, logically groups classes. Namespace can span multiple assembly.

(B) If you want to view an Assembly how do you go about it?


Twist: What is ILDASM?
When it comes to understanding of internals, nothing can beat ILDASM. ILDASM converts the whole exe or dll in to IL code. To run ILDASM you have to go to C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin. Note that we had v1.1 you have to probably change it depending on the type of framework version you have. If you run IDASM.EXE from the path you will be popped with the IDASM exe program as shown in figure ILDASM. Click on file and browse to the respective directory for the DLL whose assembly you want to view. After you select the DLL you will be popped with a tree view details of the DLL as shown in figure ILDASM. On double clicking on manifest, you will be able to view details of assembly, internal IL code etc as shown in Figure Manifest View.
Note : The version number are in the manifest itself which is defined with the DLL or EXE thus making deployment much easier as compared to COM where the information was stored in registry. Note the version information in Figure Manifest view.

Page 31 of 397 You can expand the tree for detail information regarding the DLL like methods, properties, functions etc.

Figure: - 1.1 ILDASM

Figure: - 1.2 Manifest View

Page 32 of 397

(A) What is Manifest?


Assembly metadata is stored in Manifest. Manifest contains all the metadata needed to do the following things (See Figure Manifest View for more details): Version of assembly. Security identity. Scope of the assembly. Resolve references to resources and classes.

The assembly manifest can be stored in a PE file either (an .exe or) .dll with Microsoft intermediate language (MSIL code with Microsoft intermediate language (MSIL) code or in a stand-alone PE file, that contains only assembly manifest information.

(B) Where is version information stored of an assembly?


Version information is stored in assembly inside the manifest.

(I) Is versioning applicable to private assemblies?


Versioning concept is only applicable to global assembly cache (GAC) as private assembly lie in their individual folders. This does not mean versioning is not needed , you can still version it to have better version control on the project.

(B) What is GAC?


Twist: In what situations will you register .NET assembly in GAC?
GAC (Global Assembly Cache) is where all shared .NET assembly reside. GAC is used in the following situations: If the application has to be shared among several application. If the assembly has some special security, requirements like only administrators can remove the assembly. If the assembly is private then a simple delete of assembly the assembly file will remove the assembly.

Note:- Registering .NET assembly in GAC can lead to the old problem of DLL hell, where COM version was stored in central registry. So GAC should be used when absolutely necessary.

(I) what is the concept of strong names?


Twist: - How do we generate strong names? Twist: - What is use the of SN.EXE?

Twist: - How do we apply strong names to assembly? Twist: - How do you sign an assembly?
Strong name is similar to GUID (It is supposed to be unique in space and time) in COM components. Strong Name is only needed when we need to deploy assembly in GAC. Strong Names helps GAC to differentiate between two versions. Strong names use public key

Page 33 of 397 cryptography (PKC) to ensure that no one can spoof it.PKC use public key and private key concept. Following are the step to generate a strong name and sign a assembly: Go to Visual Studio Command Prompt. See the below figure Visual studio Command prompt. Note the samples are compiled in 2005 but 2003 users do not have to worry about it. Same type of command prompt will be seen in 2003 also.

Figure: - 1.3 Visual Studio Command Prompt Once you are in command, prompt type sn.exe -k c:\test.snk.

Figure: - 1.4 Running SN.EXE

Figure: - 1.5 Successful output of SN.EXE

Page 34 of 397

Figure: - 1.6 Sample view of test.snk file

After generation of the file you can view the SNK file in a simple notepad After the SNK file is generated its time to sign the project with this SNK file.

Figure: - 1.7 Click on project & then click on classlibrary1 properties menu to sign the assembly

Click on project -- properties and the browse the SNK file from the respective folder and compile the project.

Page 35 of 397

Figure: - 1.8 Click on Use a key file to sign the assembly with strong name

(I) How to add and remove an assembly from GAC?


There are two ways to install .NET assembly in GAC: Using Microsoft Installer Package. You can get download of installer from http://www.microsoft.com. Using Gacutil. Go to Visual Studio Command Prompt and type gacutil i (assembly name), where (assembly name) is the DLL name of the project.

(B) What is Delay signing?


During development process you will need strong name keys to be exposed to developer which is not a good practice from security aspect point of view.In such situations you can assign the key later on and during development you an use delay signing Following is process to delay sign an assembly: First obtain your string name keys using SN.EXE. Annotate the source code for the assembly with two custom attributes from System.Reflection: AssemblyKeyFileAttribute, which passes the name of the file containing the public key as a parameter to its constructor. AssemblyDelaySignAttribute, which indicates that delay signing, is being used by passing true as a parameter to its constructor. For example as shown below:

[Visual Basic] <Assembly: AssemblyKeyFileAttribute ("myKey.snk")> <Assembly: AssemblyDelaySignAttribute (true)> [C#] [Assembly: AssemblyKeyFileAttribute ("myKey.snk")] [Assembly: AssemblyDelaySignAttribute (true)]

Page 36 of 397

The compiler inserts the public key into the assembly manifest and reserves space in the PE file for the full strong name signature. The real public key must be stored while the assembly is built so that other assemblies that reference this assembly can obtain the key to store in their own assembly reference. Because the assembly does not have a valid strong name signature, the verification of that signature must be turned off. You can do this by using the Vr option with the Strong Name tool. The following example turns off verification for an assembly called myAssembly.dll. Just before shipping, you submit the assembly to your organization signing authority for the actual strong name signing using the R option with the Strong Name tool. The following example signs an assembly called myAssembly.dll with a strong name using the sgKey.snk key pair.
Sn -R myAssembly.dll sgKey.snk

Sn Vr myAssembly.dll

(B) What is garbage collection?


Garbage collection is a CLR feature, which automatically manages memory. Programmers forget to release the objects while coding ... Laziness (Remember in VB6 where one of the good practices is to set object to nothing) . CLR automatically releases objects when they are no longer in use and refernced. CLR runs on non-deterministic to see the unused objects and cleans them. One side effect of this non-deterministic feature is that we cannot assume an object is destroyed when it goes out of the scope of a function. We should avoid using destructors because before GC destroys the object it first executes destructor in that case it will have to wait for code to release the unmanaged resource. This results in additional delays in GC. So it is recommended to implement IDisposable interface, write cleanup code in Dispose method, and call GC.SuppressFinalize method. Its like instructing GC not to call your constructor. For more details read why is it preferred to not use finalize for clean up? in OOPS chapter..

(I) Can we force garbage collector to run?


System.GC.Collect () forces garbage collector to run. This is not recommended but can be used if situations arise.

(B) What is reflection?


All .NET assemblies have metadata information stored about the types defined in modules. This metadata information can be accessed by mechanism called as Reflection. System. Reflection can be used to browse through the metadata information. Using reflection, you can also dynamically invoke methods using System.Type.Invokemember. Below is sample source code if needed you can also get this code from CD provided, go to Source code folder in Reflection Sample folder.
Public Class Form1 Private Sub Form1_Load (ByVal sender As System. Object, ByVal e as System.EventArgs) Handles MyBase.Load Dim Pobjtype As Type

Page 37 of 397
Dim PobjObject As Object Dim PobjButtons As New Windows.Forms.Button () Pobjtype = PobjButtons.GetType () For Each PobjObject in Pobjtype.GetMembers LstDisplay.Items.Add (PobjObject.ToString ()) Next End Sub End Class Note:- Sample source code is compiled using VB.NET 2005.

Figure:- 1.9 Sample reflection display

Sample source code uses reflection to browse through Button class of Windows.Forms. If you compile and run the program following is output as shown in Sample Reflection Display. Using this reflection, you can also dynamically invoke a method using System.Type.InvokeMember.
Note:- System.Type.InvokeMember is left as homework for readers. Believe me you will enjoy doing it yourself and the concept of reflection will be clearer.

Page 38 of 397

(A) What are different types of JIT?


JIT compiler is a part of the runtime execution environment. In Microsoft .NET there are three types of JIT compilers: Pre-JIT: - Pre-JIT compiles complete source code into native code in a single compilation cycle. This is done at the time of deployment of the application. Econo-JIT: - Econo-JIT compiles only those methods that are called at runtime. However, these compiled methods are removed when they are not required. Normal-JIT: - Normal-JIT compiles only those methods that are called at runtime. These methods are compiled the first time they are called, and then they are stored in cache. When the same methods are called again, the compiled code from cache is used for execution.

(C) What are Value types and Reference types?


Value types directly contain their data that are either allocated on the stack or allocated in-line in a structure. So value types are actual data. Reference types store a reference to the value's memory address, and are allocated on the heap. Reference types can be self-describing types, pointer types, or interface types. You can view reference type as pointers to actual data. Variables that are value types each have their own copy of the data, and therefore operations on one variable do not affect other variables. Variables that are reference types can refer to the same object; therefore, operations on one variable can affect the same object referred to by another variable. All types derive from the System. Object base type.

(B) What is concept of Boxing and Unboxing ?


Boxing and unboxing act like bridges between value type and reference types. When we convert value type to a reference type its termed as boxing. Unboxing is just vice-versa. When an object box is cast back to its original value type, the value is copied out of the box and into the appropriate storage location. Below is sample code of boxing and unboxing where integer data type are converted in to object and then vice versa.
int i = 1; object obj = i; int j = (int) obj; // boxing // unboxing

(B) What is the difference between VB.NET and C#?


Well this is the most debatable issue in .NET community and people treat languages like religion. It is a subjective matter which language is best. Some like VB.NETs natural style and some like professional and terse C# syntaxes. Both use the same framework and speed is very much equivalents. Still let us list down some major differences between them:Advantages VB.NET: Has support for optional parameters that makes COM interoperability much easy.

Page 39 of 397 With Option Strict off late binding is supported.Legacy VB functionalities can be used by using Microsoft.VisualBasic namespace. Has the WITH construct which is not in C#. The VB.NET parts of Visual Studio .NET compiles your code in the background. While this is considered an advantage for small projects, people creating very large projects have found that the IDE slows down considerably as the project gets larger.

Advantages of C# XML documentation is generated from source code but this is now been incorporated in Whidbey. Operator overloading which is not in current VB.NET but is been introduced in Whidbey. Use of this statement makes unmanaged resource disposal simple.
Access to Unsafe code. This allows pointer arithmetic etc, and can improve performance in some situations. However, it is not to be used lightly, as a lot of the normal safety of C# is lost (as the name implies).This is the major difference that you can access unmanaged code in C# and not in VB.NET.

(I) what is the difference between System exceptions and Application exceptions?
All exception derives from Exception Base class. Exceptions can be generated programmatically or can be generated by system. Application Exception serves as the base class for all applicationspecific exception classes. It derives from Exception but does not provide any extended functionality. You should derive your custom application exceptions from Application Exception. Application exception is used when we want to define user-defined exception, while system exception is all that is defined by .NET.

Page 40 of 397

Figure: - 1.10 Exception Hierarchy

Note:- Frankly we have always relied on using Microsoft exception application blocks. As such I have never used application exception; we think most of the work can be done using System exception classes.

(I)What is CODE Access security?


CAS is part of .NET security model that determines whether a piece of code is allowed to run and what resources it can use while running. Example CAS will allow an application to read but not to write and delete a file or a resource from a folder..

(I)What is a satellite assembly?


Refer Localization chapter for more details

(A) How to prevent my .NET DLL to be decompiled?


By design, .NET embeds rich Meta data inside the executable code using MSIL. Any one can easily decompile your DLL back using tools like ILDASM (owned by Microsoft) or Reflector for .NET which is a third party. Secondly, there are many third party tools, which make this decompiling process a click away. So any one can easily look in to your assemblies and reverse engineer them back in to actual source code and understand some real good logic, which can make it easy to crack your application. The process by which you can stop this reverse engineering is using obfuscation. It is a technique, which will foil the decompilers. Many third parties (XenoCode, Demeanor for .NET) provide .NET obfuscation solution. Microsoft includes one that is Dotfuscator Community Edition with Visual Studio.NET.

Page 41 of 397
Note:- We leave this as homework to readers compile, a DLL obfuscate it using Dotfuscator Community Edition which comes with Visual Studio.NET and try viewing the same using ILDASM.

(I) what is the difference between Convert.toString and .toString () method?


Just to give an understanding of what the above question means see the below code.
int i =0; MessageBox.Show(i.ToString()); MessageBox.Show(Convert.ToString(i));

We can convert the integer i using i.ToString() or Convert.ToStringso what is the difference. The basic difference between them is Convert function handles NULLS while i.ToString() does not it will throw a NULL reference exception error. So as a good coding practice using convert is always safe.

(A) What is Native Image Generator (Ngen.exe)?


The Native Image Generator utility (Ngen.exe) allows you to run the JIT compiler on your assembly's MSIL and generate native machine code which is cached to disk. After the image is created .NET runtime will use the image to run the code rather than from the hard disk. Running Ngen.exe on an assembly potentially allows the assembly to load and execute faster, because it restores code and data structures from the native image cache rather than generating them dynamically. Below are some points to be remembered for Native Image Generator: Native images load faster than MSIL because JIT compilation and type-safety verifications is eliminated. If you are sharing code between process Ngen.exe improves the performance significantly. As Native image generated Windows PE file so a single DLL file can be shared across applications. By contrast JIT produced code are private to an assembly and cannot be shared. Native images enable code sharing between processes. Native images require more storage space and more time to generate. Startup time performance improves lot. We can get considerable gains when applications share component assemblies because after the first application has been started the shared components are already loaded for subsequent applications. If assemblies in an application must be loaded from the hard disk, does not benefit as much from native images because the hard disk access time shadows everything. Assemblies in GAC do not benefit from Native image generator as the loader performs extra validation on the strong named assemblies thus shadowing the benefits of Native Image Generator. If any of the assemblies change then Native image should also be updated.

Page 42 of 397 You should have administrative privilege for running Ngen.exe. While this can fasten, your application startup times as the code is statically compiled but it can be somewhat slower than the code generated dynamically by the JIT compiler. Therefore, you need to compare how the whole application performance with Ngen.exe and with out it.

To run Ngen.exe, use the following command line.


ngen.exe install <assemblyname>

This will synchronously precompile the specified assembly and all of its dependencies. The generated native images are stored in the native image cache. In .NET Framework 2.0 there is a service (.NET Runtime Optimization Service) which can precompile managed assemblies in the background. You can schedule your assemblies to be precompiled asynchronously by queuing them up with the NGEN Service. Use the following command line.
Ngen.exe install <assemblyname> /queue :<priority>

Assemblies, which are critical to your applications start up time, should be precompiled either synchronously or asynchronously with priority 1. Priority 1 and 2 assemblies are precompiled aggressively while Priority 3 assemblies are only precompiled during machine idle-time. Synchronously precompiling your critical assemblies guarantees that the native images will be available prior to the first time your end user launches the application but increases the time taken to run your application's set up program. You can uninstall an assembly and its dependencies (if no other assemblies are dependent on them) from the native image cache by running the following command.
ngen.exe uninstall <assemblyname>

Native images created using Ngen.exe cannot be deployed; instead, they need to be created on the end user's machine. These commands therefore need to be issued as part of the application's setup program. Visual Studio .NET can be used to implement this behavior by defining custom actions in a Microsoft Installer (MSI) package.
Note:- One of the things the interviewer will expect to be answered is what scenario will use a Native Image generator. Best is to say that we first need to test the application performance with Native Image and with out it and then make a decision. If we see that we have considerable performance difference we can then use native image generator.

(A) If we have two version of same assembly in GAC how do we make a choice?
Note:- We really want to explain this in depth for two reasons. First we have seen this question been frequently asked and second its of real practical importance. So lets try to get this fundamental not in our brain but in our heart.

Page 43 of 397 OK first let us try to understand what the interviewer is talking about. Let us say you have made an application and its using a DLL which is present in GAC. Now for some reason you make second version of the same DLL and put it in GAC. Now which DLL does the application refer? Ok by default, it always uses the version by which you have compiled. However, you want that it should actually use the older version. So first, we answer in short. You need to specify bindingRedirect in your config file. For instance in the below case ClassLibraryVersion has two versions 1.1.1830.10493 and 1.0.1830.10461 from which 1.1.1830.10493 is the recent version. However, using the bindingRedirect we can specify saying 1.0.1830.10461 is the new version. Therefore, the client will not use 1.1.1830.10493.
<Configuration> <runtime> <assemblyBinding xmlns="urn: schemas-microsoftcom:asm.v1"> <dependentAssembly>
<assemblyIdentity name="ClassLibraryVersion" PublicKeyToken="b035c4774706cc72" Culture="neutral"/>

<bindingRedirect oldVersion= "1.1.1830.10493" NewVersion= "1.0.1830.10461"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration>

Ok now we will try to answer it in long way by doing a small sample project. Again, this project will be done using C#. In CD you can find the Versioning project. Below is the solution display, it has two projects one the windows client project (WindowsVersioningCSharp) and second the class library project (ClassLibraryVersion) which will be installed in GAC with two versions.

Page 44 of 397

Figure 1.11: - Solution files for the versioning project.

Our first primary goal is to put two different versions of the same DLL in GAC. So let us make a walk through of ClassLibraryVersion project. It is a very simple class that has Version function, which just sends a string This is old Version. Second, we will also just ensure that the assembly version is 1.0 in the AssemblyInfo.cs.

Figure 1.12: - Assembly Version 1.0

Second, in order that we can put a DLL in GAC we need to create generate strong names and assign the same to the class. For instance, in below figure I have generated the strong name in mykey.snk and assigned the same to the DLL.

Page 45 of 397

Figure 1.13: - Strong naming your DLL

Finally, we need to install the same in GAC using gacutil tool. Below is the figure that shows the same. This installs one version of ClassLibraryVersion.dll in GAC.

Figure 1.14: - Install the same in GAC

Now it is time to create a second version of the DLL. So here is what we will do first, we will just return a different string value for this new version DLL. You can see in the below figure I have changed the string to return This is New Version. Secondly we also need to change the AssemblyVersion to 1.1.* in the AssemblyInfo.cs file. After that again compile the DLL and run the gacutil to register this second version of the ClasLibraryVersion.dll.

Figure 1.15: - Rename to Assembly Version 1.1

Page 46 of 397 Now when we view the GAC we can see two version of ClassLibraryVersion i.e. 1.1.1832.2619 and 1.0.1832.2172 (see figure below).

Figure 1.16: - Two version of ClassLibraryVersion dll.

Now that we have created the environment of two version of the same DLL in GAC its time to look at how client can make a choice between those versions. We need to generate publicKeyToken in order to move ahead. Below is a sample print screen, which shows how we can use sn.exe to generated the public key token. Note the -T parameter.

Figure 1.17: - Get the PublicKeyToken

Now let us look at the client that will consume this DLL. I have just added windows form and a button to the same. In the button click, we will try to call the version function and display the data. Therefore, below is the code in the first step we create the object of ClassLibraryVersion.Class1 and in the second step we call the Version function to display the data.

Figure 1.18: - Client code calling the GAC class.

Page 47 of 397 Now comes the most important part of the whole thing the app.config file, which will decide which version, should be used. So add a new app.config file in the project and add the AssemblyBinding section as show below. Therefore, you need to specify the following things: Assembly name in the name attribute of assemblyIdentity section. Specify the publicKeyToken value in the assemblyIndentitysection which was generated using sn.exe T dllname.dll . Specify the oldVersion and newVersion values in the bindingRedirect element. So whatever version we want the client to use should be specified in the newVersion attribute.

You can see from the figure below I have specified that client should use 1.0.* version. Therefore, the client will display This is old Version.

Figure 1.19: - App.config file using the BindingRedirect

If you run the source code with changing version numbers you can see the below two message boxes on different version numbers. This is old version will be displayed when newVersion value is 1.0.1832.5411 and This is new Version will be displayed when newVersion value is 1.1.1832.5427.

Page 48 of 397

Figure 1.20: - Different Display depending on version numbers Note:- Source code is provided in versioning folder. But as you compile the DLLs different publicToken numbers are created so you need to run the sn.exe in your machine and change the token number accordingly in the App.config file.

(A)What is CodeDom?
CodeDom is an object model that represents actually a source code. We can generate real C# and VB.NET from codedom. It is designed to be language independent - once you create a CodeDom hierarchy for a program, we can then generate the source code in any .NET compliant language. So let us try to do something real practical and simple to just get a feel of how powerful CodeDom is.
Note:- You can get the source code in CD in CodeDom folder.

We will try to generate the following code below. The below code which will be generated does not do anything special buy just displays a hello message and waits for the key to be pressed.
namespace InterviewQuestions { Using System; Public class Entry Point { Public static void Main () { System.Console.WriteLine (Hello from Interview Question series); System.Console.ReadLine (); } } }

Page 49 of 397 The Codedom folder in the CD has one GenerateCode method, which returns CodeCompileUnit object. CodeDom is nothing but a full DOM model where every object in the structure represents a code unit. I have put comments the code so that the code is selfunderstandable. We have commented the code below so that readers can follow what is exactly happening. When you click the button, it generates the MyCode.cs and also compiles the Mycode.exe in the bin folder.
Private CodeCompileUnit GenerateCode () { // Definition of the Main method which will be entry point CodeEntryPointMethod objMainMethod = new CodeEntryPointMethod (); objMainMethod.Name = Main; // generate this expression: Console CodeTypeReferenceExpression console Type = new CodeTypeReferenceExpression (); consoleType.Type = new CodeTypeReference (type of (Console)); // Set up the argument list to pass to Console.WriteLine () Code Expression [] writeLineArgs = new Code Expression [1]; CodePrimitiveExpression arg0 = new CodePrimitiveExpression (Hello from Interview Question series); WriteLineArgs [0] = arg0;

// generate this statement: Console.WriteLine (message)


CodeMethodReferenceExpression writeLineRef = new CodeMethodReferenceExpression (console Type, WriteLine);

CodeMethodInvokeExpression write Line = new CodeMethodInvokeExpression (writeLineRef, writeLineArgs); // generate this statement: Console.ReadLine ()
CodeMethodReferenceExpression readLineRef = new CodeMethodReferenceExpression (console Type, Read Line);

CodeMethodInvokeExpression read Line = new CodeMethodInvokeExpression (readLineRef); // add Main () method to a class CodeTypeDeclaration the Class = new CodeTypeDeclaration (); theClass.Members.Add (objMainMethod);

Page 50 of 397
theClass.Name = Entry Point;

// add both the code of WriteLine and Readline objMainMethod.Statements.Add (write Line); objMainMethod.Statements.Add (read Line);

// add namespace and add class Code Namespace ns = new Code Namespace (Interview Questions); ns.Imports.Add (new CodeNamespaceImport (System)); ns.Types.Add (the Class); // Generate the Compile Unit CodeCompileUnit unit = new CodeCompileUnit(); unit.Namespaces.Add(ns);

Sample provided is very basic but in actual project, using codedom can be very complicated. Projects where you need auto code generation codedom can be a right choice. Beware of high bulky architecture created due to codedom.

Chapter 2: NET Interoperability

(I) How can we use COM Components in .NET?


Twist: What is RCW?
.NET components communicate with COM using RCW (Runtime Callable Wrapper). Following are the ways with which you can generate RCW: Adding reference in Visual Studio.net. See figure below (Adding reference using VS.NET 2005). Wrapper class is generated and placed in the BIN directory.

Page 51 of 397

Figure: - 2.1 Adding Reference using VS.NET 2005 Using Type library import tool. Tlbimp.exe yourname.dll. o Using interopservices.System.runtime.Interopservices namespace contains class TypeLib Converter that provides methods to convert COM classes and interface in to assembly metadata. Make your custom wrappers. If your COM component does not have type library then the only way to communicate is writing custom wrappers. That means communicating directly with COM components.

(I) We have developed the COM wrapper do we have to still register the COM?
Yes.

(A)How can we use .NET components in COM?


Twist: - What is CCW (COM callable wrapper)? Twist: - How do we ensure that a .NET component is compatible with COM?
.NET components cannot be used in a straightforward way with COM. You will need to create CCW in order that COM components communicate with .NET assemblies. Following are the different approaches to implement it: Explicitly declare interfaces..
Public Interface ICustomer Property CustomerName() As String Property CustomerCode() As String Sub AddCustomer() End Interface

Page 52 of 397
Public Class Customer Implements ICustomer Private PstrCustomerName As String Private PstrCustomerCode As String

Public Sub AddCustomer() Implements ICustomer.AddCustomer

Try addin of database code can go here Catch ex As Exception


Throw ex End Try

End Sub

Public Property CustomerCode() As String Implements ICustomer.CustomerCode Get Return PstrCustomerCode End Get Set(ByVal value As String) PstrCustomerCode = value End Set End Property Public Property CustomerName() As String Implements ICustomer.CustomerName Get Return PstrCustomerName End Get Set(ByVal value As String) PstrCustomerName = value End Set End Property Public Sub New()

End Sub End Class

Page 53 of 397
Note:- Source code of this is provided in CD in SOURCECODE folder in COMCALLABLEWRAPPER

The above customer class is going to be used by COM components so all the properties and methods are declared in interface and implemented in the customer class. Customer Name.Customer Code and AddCustomer are first declared in ICustomer and then implemented in Customer Class. Also, note that the class must have a default constructor.
Note:- All source code in this book is provided in VB.NET that does not mean that author of the book does not like C#. In fact, the main programming language of author is C#. In order to keep things small I have only used one language. However, the conversion is so seamless that it is of least matter.

The second way to create CCW is by using InteropServices attributes. Here interfaces are created automatically. Following are different type of class attributes: None:-No class interface is generated for the class. This is default setting when you do not specify anything. AutoDispatch: - Interface that supports IDispatch is created for the class. However, no type information is produced. Auto Dual: - A dual interface is created for the class. Type information is produced and made available in the type library. Below in the source code we have used the third attribute.
Imports System.Runtime.InteropServices <ClassInterfaceAttribute (ClassInterfaceType.AutoDual)> _ Public Class ClsCompliant End Class

Other than class, attributes defined up there are other attributes with which you can govern other part of assembly. Example GuidAttribute allows you to specify the GUID, ComVisibleAttribute can be used to hide .NET types from COM etc. All attributes are not in scope of the book as this is a interview questions book refer MSDN for more details. Once .NET assembly is created using either interface or using interopservices method we need to create a COM type library using Type library export tool.

Tlbexp (Assembly Name)


The final thing is registering the CCW in registry using regasm tool.

regasm Assembly Name [Options]


Finally refer the TLB in your COM IDE Below is figure showing VB6 IDE referencing the DLL

Page 54 of 397
Note:- DLL and TLB should be in same directory where the application is executed.

Figure: - 2.2 VB6 IDE referencing the CCW

(A) How can we make Windows API calls in .NET?


Windows API calls are not COM based and they are invoked through Platform Invoke Services.
Declare StringConversionType (Function | Sub) MethodName Lib "DllName" ([Args]) As Type

StringConversionType is for what type of conversion should take place. Either we can specify Unicode to convert all strings to Unicode values, or Auto to convert strings according to the .NET runtime rules. MethodName is the name of the API to call. DllName is the name of the DLL. Args are any arguments to the API call. Type is the return type of the API call.

Below is a sample code for VB.NET, which uses Sleep windows API for delaying.
Public Class Form1 Declare Auto Sub Sleep Lib kernel32.dll (ByVal dwMilliseconds As Long) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load MessageBox.Show( start sleeping for 5000 Milli seconds.....) Sleep(5000)

Page 55 of 397
MessageBox.Show( end of sleeping.....) End Sub End Class

Note:- Source code is provided in CD in APICALL folder.In VB.NET we

use declare keyword but in C# it goes little bit different, we need to use DLLIMPORT,interopservices and EXTERN keyword. Below is a simple
sample for the same. #region Using directives

using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; #endregion

namespace CSharpCode { partial class Form1 : Form { [DllImport(Kernel32.dll)] static extern int Sleep(long dwMilliseconds); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { MessageBox.Show(Starting of 5000 ms...); Sleep(5000); MessageBox.Show(End of 5000 ms...); } }

Page 56 of 397
}

(B) When we use windows API in .NET is it managed or unmanaged code?


Windows API in .NET is unmanaged code.
Note:- Even though VB6 and V C++ has gone off still many people do ask these old questions again and again. Still there are decent old application which are working with COM very much fine. So interviewer still asks you these questions so that those applications can be ported to .NET. So lets play some old music... By the way my favourite music is Kishore, whats yours???

(I)What is COM?
Microsofts COM is a technology for component software development. It is a binary standard, which is language independent. DCOM is a distributed extension of COM.

(A) What is Reference counting in COM?


Reference counting is a memory management technique used to count how many times an object has a pointer referring to it. The first time it is created, the reference count is set to one. When the last reference to the object is nulled, the reference count is set to zero and the object is deleted. Care must be exercised to prevent a context switch from changing the reference count at the time of deletion. In the methods that follow, the syntax is shortened to keep the scope of the discussion brief and manageable.

(A) Can you describe IUKNOWN interface in short?


Every COM object supports at least one interface, the IUnknown interface. All interfaces are classes derived from the base class IUnknown. Each interface supports methods access data and perform operations transparently to the programmer. For example, IUnknown supports three methods, AddRef, Release(), and QueryInterface(). Suppose that pinterf is a pointer to an IUnknown. pinterf->AddRef() increments the reference count. pinterf->Release() decrements the reference count, deleting the object when the reference count reaches zero. pinterf>QueryInterface (IDesired, pDesired) checks to see if the current interface (IUnknown) supports another interface, IDesired, creates an instance (via a call to CoCreateInstance ()) of the object if the reference count is zero (the object does not yet exist), and then calls pDesired->AddRef () to increment the reference count (where pDesired is a pointer to IDesired) and returns the pointer to the caller.

(I) Can you explain what DCOM is?


DCOM differs from COM in that it allows for creating objects distributed across a network, a protocol for invoking that objects methods, and secures access to the object. DCOM provides a wrapper around COM, hence it is a backwards compatible extension. DCOM uses Remote Procedural Calls (RPC) using Open Software Foundations Distributed Computing Environment. These RPC are implemented over TCP/IP and named pipes. The protocol, which is actually being used, is registered just prior to use, as opposed to being registered at initialization time. The reason for this is that if a protocol is not being used, it will not be loaded.

Page 57 of 397 In order to inform an object that the client is still alive, periodic pinging is used. Hence, when the client has died and no ping has been received (to refresh it) before the expiration time, the server object will perform some clean up tasks (including decrementing its reference count). Since RPC across a network are typically slow (compared to processes residing on the same machine), DCOM sends multiple requests in the same call. For example, in COM, the program performs a QueryInterface, one interface at a time. In DCOM, multiple QueryInterfaces are all clustered into one call. This clustering optimization trick is also used when creating an instance of the object and serializing it with data. Since these two operations usually occur together, DCOM allows one method, which will perform both operations in one call without waiting for an acknowledgment from the first task before performing the second one. Similarly, when a client pings its server object, he can do it in one call. Moreover, if there are multiple clients sending pings to multiple servers, an optimization is made where the multiple pings going to the same object are consolidated into just one ping. This is to cut down on the use of precious bandwidth used only for pinging. The client has the control to set the computer, which will be responsible for the lifetime of the object. That is to say, these objects are not created just somewhere where the system resources and access privileges allow for it. Call security is implemented in all four ways: authentication (to prevent false clients from impersonating the true client), authorization (to insure that a client only does what it is authorized to do), data integrity (to insure that data was not tampered with during transit), and data privacy (to insure that only designated sources can read it). The security issues are handled as they are on operating systems. The client gives the server various access privileges to access memory or disk space

(B) How do we create DCOM object in VB6?


Using the CreateObject method, you can create a DCOM object. You have to put the server name in the registry.

(A) How to implement DTC in .NET?


DTC is implemented using COM+. Following are the steps to implement COM + in .NET: EnterpriseService namespace has all the classes by which we can implement DTC in .NET. You have to add reference EnterpriseService namespace.

Page 58 of 397

Figure: - 2.3 Add reference to EnterpriseServices. You class must derive from Serviced Component object. Then you have to define your class with the transaction attribute (For all transaction attribute look the down question)

[Transaction (TransactionOption.RequiresNew) ]
After the class level, transaction type is defined. Its time to define at the method level the AutoComplete attribute. Autocomplete attribute says that if no exception is thrown then mark its part of the transaction as being okay. This helps cut down on the amount of code required. If the implementation sets AutoComplete to false, or omits it all together, then we would need to manage the transaction manually. To manually, control the transaction you will need to use the ContextUtil class and its static members. Following is small snippet of ContextUtil: public void SampleFunction() { try { // Do something to a database // ... // Everything okay so far Commit the transaction

ContextUtil.SetComplete(); } catch(Exception)

Page 59 of 397
{ // Something went wrong Abort and Rollback the Transaction. ContextUtil.SetAbort(); } }

Component derived from ServicedComponent should be strong named as they run under COM+. Once the classes are compiled using the string name. Register the Component in COM+ services using

regsvcs c:\DllPath\TransactionComponent.dll
You can see that the component is registered using the COM+ explorer.

(B) How many types of Transactions are there in COM + .NET?


5 transactions types can be used with COM+. Whenever an object is registered with COM+, it has to abide either to these 5 transaction types. Disabled: - There is no transaction. COM+ does not provide transaction support for this component. Not Supported: - Component does not support transactions. Hence even if the calling component in the hierarchy is transaction enabled this component will not participate in the transaction. Supported: - Components with transaction type support will be a part of the transaction. This will be only if the calling component has an active transaction. If the calling component is not transaction enabled this component will not start a new transaction. Required: - Components with this attribute require a transaction i.e. either the calling should have a transaction in place else, this component will start a new transaction. Required New: - Components enabled with this transaction type always require a new transaction. Components with required new transaction type instantiate a new transaction for themselves every time.

(A) How do you do object pooling in .NET?


COM+ reduces overhead by not creating object from scratch. So in COM+ when object is activated its activated, from pool and when it has deactivated its pushed back to the pool. Object pooling is configures by using the ObjectPoolingAttribute to the class.
Note:- When a class is marked with objectpooling attribute it can not be inherited.

ObjectPooling(MinPoolSize := 2, MaxPoolSize := 5, CreationTimeout := 20000)> _ Public Class testingclass

Page 60 of 397
Inherits ServicedComponent Public Sub DoWork() ' Method contents go here. End Sub End Class

Above is a sample code, which has the Object Pooling attribute defined. Below is a sample code, which uses the class.
Public Class App Overloads Public Shared Sub Main(args() As String) Dim xyz As New TestObjectPooling() xyz.doWork() ServicedComponent.DisposeObject (xyz) End Sub End Class

Above is a sample code, which uses the object pooled object. Note the Dispose Object () This ensures its safe return to the object pool.

(A) What are types of compatibility in VB6?


There are three possible project compatibility settings: No Compatibility Project Compatibility Binary Compatibility

No Compatibility
With this setting, new class IDs, new interface IDs and a new type library ID will be generated by VB each time the ActiveX component project is compiled. This will cause any compiled client components to fail (with error 429!) and report a missing reference to the 'VB ActiveX Test Component' when a client project is loaded in the VB IDE.
Note:- Use this setting to compile the initial release of a component to other developers.

Project Compatibility
With this setting, VB will generate new interface IDs for classes whose interfaces have changed, but will not change the class IDs or the type library ID. This will still cause any compiled client components to fail (with error 429!) but will not report a missing reference to the 'VB ActiveX Test Component' when a client project is loaded in the VB IDE. Recompilation of client components will restore them to working order again.

Page 61 of 397
Note:- Use this setting during the initial development and testing of a component within the IDE and before the component is released to other developers.

Binary Compatibility
VB makes it possible to extend an existing class or interface by adding new methods and properties etc. and yet still retain binary compatibility. It can do this, because it silently creates a new interface ID for the extended interface and adds registration code to register the original interface ID but with a new Forward key containing the value of this new interface ID. COM will then substitute calls having the old ID with the new ID and hence applications built against the old interface will continue to work (assuming the inner workings of the component remain backward compatible!). With this setting, VB will not change any of the existing class, interface or type library IDs, however in order that it can do so, VB requires the project to specify an existing compiled version that it can compare against to ensure that existing interfaces have not been broken

(A)What is equivalent for regsvr32 exe in .NET?


Regasm

Chapter 3: Threading
(B) What is Multi-tasking?
It is a feature of modern operating systems with which we can run multiple programs at same time example Word, Excel etc.

(B) What is Multi-threading?


Multi-threading forms subset of Multi- tasking. Instead of having to switch between programs, this feature switches between different parts of the same program. Example you are writing in word and at the same time word is doing a spell check in background.

(B) What is a Thread?


A thread is the basic unit to which the operating system allocates processor time.

(B) Did VB6 support multi-threading?


While VB6 supports multiple single -threaded apartments, it does not support a free-threading model, which allows multiple threads to run against the same set of data.

(B)Can we have multiple threads in one App domain?


One or more threads run in an AppDomain. An AppDomain is a runtime representation of a logical process within a physical process. Each AppDomain is started with a single thread, but can create additional threads from any of its threads.
Note :- All threading classes are defined in System.Threading namespace.

Page 62 of 397

(B) Which namespace has threading?


Systems.Threading has all the classes related to implement threading. Any .NET application who wants to implement threading has to import this namespace.
Note: - .NET program always has at least two threads running one is the main program and second is the garbage collector.

(I)Can you explain in brief how can we implement threading?


Private Sub Form1_Load (ByVal sender As System. Object, ByVal e as System.EventArgs) Handles MyBase.Load Dim pthread1 Dim As New Thread As (AddressOf New Thread Thread1) pthread2

(AddressOf Thread2) pthread1.Start () pthread2.Start () End Sub


Public Sub Thread1 () Dim pint count As Integer Dim pstr As String Pstr = This is first thread Do Until pint count > 5 lstThreadDisplay.Items.Add (pstr) Pint count = pint count + 1

Loop End Sub Public Sub Thread2 () Dim pint count As Integer Dim pstr As String
Pstr = This is second thread Do Until pint count > 5 lstThreadDisplay.Items.Add (pstr) Pint count = pint count + 1

Loop End Sub

Above is a sample code which shows simple sample code for threading. Above sample, code can be found in Threading folder in CD provided. Above sample has two methods Thread1 () and Thread2 () which are started in multi-threaded mode in Form load event of the sample.

Page 63 of 397
Note: - If you run the sample, you will see that sometimes the first thread runs first and then the second thread. This happens because of thread priorities. The first thread is run with highest priority.

(A) How can we change priority and what the levels of priority are provided by .NET?
Thread Priority can be changed by using
Threadname.Priority = ThreadPriority.Highest

Following are different levels of Priority provided by .NET: ThreadPriority.Highest ThreadPriority.AboveNormal ThreadPriority.Normal ThreadPriority.BelowNormal ThreadPriority.Lowest

(B) What does Address Of operator do in background?


The AddressOf operator creates a delegate object to the Background Process method. A delegate within VB.NET is a type-safe, object -oriented function pointer. After the thread has been instantiated, you begin the execution of the code by calling the Start () method of the thread

(A) How can you reference current thread of the method?


"Thread.CurrentThread" refers to the current thread running in the method."CurrentThread" is a public static property.

(I) what is Thread.Sleep () in threading?


Thread's execution can be paused by calling the Thread.Sleep method. This method takes an integer value that determines how long the thread should sleep. Example Thread.CurrentThread.Sleep(2000).

(A) How can we make a thread sleep for infinite period?


You can also place a thread into the sleep state for an indeterminate amount of time by calling Thread.Sleep (System.Threading.Timeout.Infinite). To interrupt this sleep you can call the Thread. Interrupt method.

(A) What is Suspend and Resume in Threading?


It is Similar to Sleep and Interrupt Suspend allows you to block a thread until another Thread calls Thread.Resume. The difference between Sleep and Suspend is that the latter does not immediately place a thread in the wait state. The thread does not suspend until the .NET runtime determines that it is in a safe place to suspend it. Sleep will immediately place a thread in a wait state.

Page 64 of 397
Note: - In threading interviews, most people get confused with Sleep and Suspend. They look very similar.

(A) What the way to stop a long running thread?


Thread.Abort() stops the thread execution at that moment itself.

(A) How do I debug thread?

Figure: - 3.1 Debug thread window This window is only seen when the program is running in debug mode. In windows one of the windows is Threads.

(A) What is Thread.Join () in threading?


There are two versions of Thread join Thread. join (). Thread.join (Integer) this returns a Boolean value. The Thread.Join method is useful for determining if a thread has completed before starting another task. The Join method waits a specified amount of time for a thread to end. If the thread ends before the time-out, Join returns true; otherwise, it returns False. Once you call Join, the calling procedure stops and waits for the thread to signal that it is done. Example you have "Thread1" and "Thread2" and while executing 'Thread1" you call "Thread2.Join ()".So "Thread1" will wait until "Thread2" has completed its execution and the again invoke "Thread1". Thread.Join (Integer) ensures that threads do not wait for a long time. If it exceeds a specific time, which is provided in integer the waiting thread will start.

Page 65 of 397

(A) What are Daemon threads and how can a thread be created as Daemon?
Daemon thread's run in background and stops automatically the program is not running. Example of a Daemon thread is Garbage collector. Garbage collector runs until some .NET code is running or else it is idle. You can make a thread Daemon by
Thread.Isbackground=true

(A) How is shared data managed in threading?


There are certain situations that you need to be careful with when using threads. If two threads (e.g. the main and any worker threads) try to access the same variable at the same time, you'll have a problem. This can be very difficult to debug because they may not always do it at exactly the same time. To avoid the problem, you can lock a variable before accessing it. However, if the two threads lock the same variable at the same time, you will have a deadlock problem. To avoid dead lock we need to use the SyncLock keyword as shown in the code snippet below.
SyncLock x 'Do something with x End SyncLock

(I) Can we use events with threading?


Yes, you can use events with thread; this is one of the techniques to synchronize one thread with other.

(A) How can we know a state of a thread?


"ThreadState" property can be used to get detail of a thread. Thread can have one or a combination of status.System.Threading.Threadstate enumeration has all the values to detect a state of thread. Some sample states are Isrunning, IsAlive, suspended etc.

(A) What is use of Interlocked class ?


Interlocked class provides methods by which you can achieve following functionalities : Increment Values. Decrement values. Exchange values between variables.
Compare values from any thread.in a synchronization mode. Example: - System.Threading.Interlocked.Increment(IntA)

(B) What is a monitor object?


Monitor objects are used to ensure that a block of code runs without being interrupted by code running on other threads. In other words, code in other threads cannot run until code in the synchronized code block has finished.

Page 66 of 397 SyncLock and End SyncLock statements are provided in order to simplify access to monitor object.

(A) What are wait handles?


Twist: - What is a mutex object?
Wait handles sends signals of a thread status from one thread to other thread. There are three kind of wait modes: Wait One. Wait Any. Wait All.

When a thread wants to release a Wait handle it can call set method. You can use Mutex (mutually exclusive) objects to avail for the following modes. Mutex objects are synchronization objects that can only be owned by a single thread at a time. Threads request ownership of the mutex object when they require exclusive access to a resource. Because only one thread can own a mutex object at any time, other threads must wait for ownership of a mutex object before using the resource. The WaitOne method causes a calling thread to wait for ownership of a mutex object. If a thread terminates normally while owning a mutex object, the state of the mutex object is set to be signaled and the next waiting thread gets ownership

(A) What is ManualResetEvent and AutoResetEvent?


Threads that call one of the wait methods of a synchronization event must wait until another thread signals the event by calling the Set method. There are two synchronization event classes. Threads set the status of ManualResetEvent instances to signaled using the Set method. Threads set the status of ManualResetEvent instances to no signaled using the Reset method or when control returns to a waiting WaitOne call. Instances of the AutoResetEvent class can also be set to signaled using Set, but they automatically return to nonsignaled as soon as a waiting thread is notified that the event became signaled.

(A) What is Reader Writer Locks?


You may want to lock a resource only when data is being written and permit multiple clients to simultaneously read data when data is not being updated. The ReaderWriterLock class enforces exclusive access to a resource while a thread is modifying the resource, but it allows nonexclusive access when reading the resource. Reader Writer locks are a good alternative to exclusive locks that cause other threads to wait, even when those threads do not need to update data.

(I) How can you avoid deadlock in threading?


A good and careful planning can avoid deadlocks.There are so many ways Microsoft has provided by which you can reduce deadlocks example Monitor, Interlocked classes, Wait handles, Event raising from one thread to other thread and using ThreadState property you can poll and act accordingly.

Page 67 of 397

(B) What is the difference between thread and process?


A thread is a path of execution that run on CPU, a process is a collection of threads that share the same virtual memory. A process has at least one thread of execution, and a thread always run in a process context.
Note:- Its difficult to cover threading interview question in this small chapter. These questions can take only to a basic level. If you are attending interviews where people are looking for threading specialist, try to get deeper in to synchronization issues, as that is the important point they will stress.

Chapter 4: Remoting and Webservices


(B)What is an application domain?
Previously PROCESS where used as security boundaries. One process has its own virtual memory and does not over lap the other process virtual memory; due to this, one process cannot crash the other process. Therefore, any problem or error in one process does not affect the other process. In .NET, they went one -step ahead introducing application domains. In application domains, multiple applications can run in same process with out influencing each other. If one of the application domains throws error it does not affect the other application domains. To invoke method in a object running in different application domain .NET remoting is used.

Figure: - 4.1 One process can have multiple Application domains

(B) What is .NET Remoting?


.NET remoting is replacement of DCOM. Using .NET remoting, you can make remote object calls, which lie in different Application Domains. As the remote objects run in different process client calling the remote object cannot call it directly. Therefore, the client uses a proxy, which looks like a real object. When client wants to make method call on the remote object it uses proxy for it. These method calls are called as Messages. Messages are serialized using formatter class and sent to client channel. Client Channel communicates with Server Channel. Server Channel uses as formatter to deserialize the message and sends to the remote object.

Page 68 of 397

Figure: - 4.2 Channels, Formatters and Proxy in action.

(B) Which class does the remote object has to inherit?


All remote objects should inherit from System.MarshalbyRefObject.

(I) what are two different types of remote object creation mode in .NET ?
There are two different ways in which object can be created using Remoting: SAO (Server Activated Objects) also called as Well-Known call mode. CAO (Client Activated Objects) SAO has two modes Single Call and Singleton. With Single Call object, the object is created with every method call thus making the object stateless. With Singleton, the object is created only once and the object is shared with all clients. CAO are stateful as compared to SAO. In CAO, the creation request is sent from client side. Client holds a proxy to the server object created on server.

(A) Describe in detail Basic of SAO architecture of Remoting?


For these types of questions interviewer expects small and sweet answers. He is basically looking at what you know about the specific subject. For these type of question this book will provide detail code which is not necessary to be said during interview. Only the basic steps and overall brief are enough to convince that you have knowledge about the subject. Even though this question has detail code and answer say only what is needed in interview.

Remoting has at least three sections: Common Interface, which will be shared between them. Server. Client.

Page 69 of 397

Figure :- 4.3 Solution Explorer of Remoting Project


In CD RemotingSample(SAO) project is provided which gives a insight of remoting. Above is the figure which shows the three important project sections needed to implement remoting.

First important section is the common interface between Server and Client.InterFaceRemoting project has the interface code. For sample project interface is very simple with only two methods: - SetValue and GetValue.

Public Interface InterFaceRemoting Sub SetValue(ByVal value As String) Function GetValue() As String End Interface

Second important section is the server. In this sample server is using HTTP channel and the server object is singleton.

Imports System Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels.Http Imports System.Runtime.Remoting.Channels Imports InterFaceRemoting

Public Class RemotingServer Inherits MarshalByRefObject

Implements InterFaceRemoting.InterFaceRemoting Private strData As String

Page 70 of 397
Public Function GetValue() As String Implements InterFaceRemoting.InterFaceRemoting.GetValue Return strData

End Function Sub New() strData = testing.. End Sub


Public Sub SetValue(ByVal value As String) Implements InterFaceRemoting.InterFaceRemoting.SetValue

strData = value End Sub End Class Module ModuleRemotingStartUp Sub Main()
Dim objHttpChannel As HttpChannel Console.WriteLine(Server Started....) objHttpChannel = New HttpChannel(1234) ChannelServices.RegisterChannel(objHttpChannel) RemotingConfiguration.RegisterWellKnownServiceType(GetType(RemotingServ er), RemoteObject, WellKnownObjectMode.Singleton) Console.WriteLine(Server registered and listening waiting for clients...)

Console.ReadLine()

End Sub End Module

Following is detail explanation: Channel object is created and registered. Following is the code.

Dim objHttpChannel As HttpChannel Console.WriteLine(Server Started....) objHttpChannel = New HttpChannel(1234) ChannelServices.RegisterChannel(objHttpChannel)

Page 71 of 397 Server then hosts the object so that client can connect to it. This is the time when we specify what mode the server object will be created i.e. Singleton or SingleCall. The following below do this given code. Note in sample we are hosting the server object in singleton mode that means that the same object will be shared between all clients. Also, note the server object is implementing InterFaceRemoting and inheriting from MarshalByRefObject.

RemotingConfiguration.RegisterWellKnownServiceType(GetType(RemotingServ er), RemoteObject, WellKnownObjectMode.Singleton)

Now comes the final section that is third section the client which will connect to this hosted remoting object. Following is a detail explanation of client code: First we create the channel i.e. HTTP. Note whatever channel the server is using same will be used by the client.

ChannelServices.RegisterChannel(objHttpChannel)

As said before the common interface i.e.InterFaceRemoting will be used to communicate with client. After that we can get the server object reference using following code: -

objRemoting = CType(Activator.GetObject(GetType(InterFaceRemoting.InterFaceRemoting), http://localhost:1234/RemoteObject), InterFaceRemoting.InterFaceRemoting)

Then the client can make method call as if the object is local. But actually the object is a proxy.

Console.WriteLine(Value on server :- & objRemoting.GetValue.ToString()) Imports System Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels.Http Imports System.Runtime.Remoting.Channels Imports InterFaceRemoting

Page 72 of 397

Module ModuleStartClient Sub Main() Dim objHttpChannel As New HttpChannel Dim objRemoting As InterFaceRemoting.InterFaceRemoting ChannelServices.RegisterChannel(objHttpChannel)
objRemoting = CType(Activator.GetObject(GetType(InterFaceRemoting.InterFaceRemoting),

http://localhost:1234/RemoteObject), InterFaceRemoting.InterFaceRemoting) Console.WriteLine(Referenced the main object.... Now displaying Data) Console.WriteLine(Value on server :- & objRemoting.GetValue.ToString()) Console.WriteLine(Press enter to Terminate) Console.ReadLine() End Sub End Module

You can run the program and see the output. For running the program run the server program which is in server directory. Run Server.exe from BIN directory. If the EXE runs properly following will be the screen as shown below.

Figure: - 4.4 Running Server Program of Remoting Now run Client.exe from client folder in BIN directory. Following will be the output seen. This means that the client connected to the server program and displayed the data in the server object. In the server object, we have initialized value testing... In constructor of class RemotingServer, same value is displayed at the client side as shown in figure below.

Page 73 of 397

Figure: - 4.5 Client Program output of Remoting

(A) What are the situations you will use singleton architecture in remoting?
If all remoting clients have to share the same data singleton architecture will be used.

(A) What is fundamental of published or precreated objects in Remoting?


In scenarios of singleton or single call, the objects are created dynamically. However, in situations where you want to precreate object and publish it you will use published object scenarios.
Dim obj as new objRemote

obj.Initvalue = 100 RemotingServices.Marshal(obj,RemoteObject)

As shown in above sample following changes will be needed on server side. RemotingConfiguration.RegisterWellKnownServiceType is replaced by RemotingServices.Marshal(obj,RemoteObject) where obj is the precreated objected on the server whose value is initialized to 100.

(A) What are the ways in which client can create object on server in CAO model?
You can create Client objects on remoting server by two ways: Activator.CreateInstance(). By Keyword New.

(A) Are CAO stateful in nature?


Yes. In CAO remoting model client creates a instance on server and instance variable set by client on server can be retrieved again with correct value.

Page 74 of 397

(A) To create objects in CAO with new keyword what should be done?
Remoting Clients and Remoting Server can communicate because they share a common contract by implementing Shared Interface or Base Class (As seen in previous examples). But according to OOPs concept we can not create a object of interface or Base Classes (Abstract Class). Shipping the server object to client is not a good design practice. In CAO model we can use SOAPSUDS utility to generate Metadata DLL from server which can be shipped to client, clients can then use this DLL for creating object on server. Run the SOAPSUDS utility from visual studio command prompt for syntax see below:soapsuds -ia:RemotingServer -nowp -oa:ClientMetaData.dll Where RemotingServer is your server class name.

ClientMetaData.dll is the DLL name by which you will want to create the metadll.

Server code will change as follows:ChannelServices.RegisterChannel(objHttpChannel) RemotingConfiguration.ApplicationName = RemoteObject RemotingConfiguration.RegisterActivatedServiceType(GetType(InterFaceRem oting.InterFaceRemoting))

Note:- We have to provide applicationname and register the object as ActivatedServiceType.

On client side, we have to reference the generated ClientMetaData.dll from SOAPSUDS utility. Below are changes, which are needed to be incorporated at the Remoting Client:RemotingConfiguration.RegisterActivatedClientType(typeof(RemoteObject), http://localhost:1234/MyServer) Dim objRemoteObject as new RemoteObject

RemoteObject is class, which is obtained from ClientMetaData.dll, which we created using SOAPSUDS utility. Now you can reference the object as normal object.

(I) Is it a good design practice to distribute the implementation to Remoting Client?


It is never advisable to distribute complete implementation at client, due to following reasons: Any one can use ILDASM and decrypt your logic. Its a bad architecture move to have full implementation as client side as any changes in implementation on server side you have to redistribute it again.

Page 75 of 397 Therefore, the best way is to have a interface or SOAPSUDS generated meta-data DLL at client side rather than having full implementation.

(A) What are LeaseTime, SponsorshipTime, RenewonCallTime and LeaseManagerPollTime?


This is a very important question from practical implementation point of view. Companies who have specific requirement for Remoting projects will expect this question to be answered.

In normal .NET environment objects garbage collector manages lifetime. However, in remoting environment remote clients can access objects, which are out of control of garbage collector. Garbage collector boundary is limited to a single PC on which framework is running; any remote client across physical PC is out of control of GC (Garbage Collector). This constraint of garbage collector leads to a new way of handling lifetime for remoting objects, by using concept called as LeaseTime. Every server side object is assigned by default a LeaseTime of five minutes. This lease time is decreased at certain intervals. Again, for every method call a default of two minutes is assigned. When i say method call means every call made from client. This is called as RenewalOnCallTime.
Lets put the whole thing in equation to make the concept more clear. Total Remoting object life time = LeaseTime + (Number of method calls) X (RenewalTime). Then default Remote Object Life Time = 5 + (1) X 2 = 10 minutes (Everything is in minutes)

When total object lifetime is reduced to zero, then it queries the sponsor that should the object be destroyed. Sponsor is an object, which decides should object Lifetime be renewed. So it queries any registered sponsors with the object, if does not find any then the object is marked for garbage collection. After this garbage, collection has whole control on the object lifetime. If we do not foresee how long a object will be needed specify the Sponsorship Timeout value. Sponsorship Timeout is time unit a call to a sponsor is timed out. LeaseManagerPollTime defines the time the sponsor has to return a lease time extension.

(A) Which config file has all the supported channels/protocol?


Machine.config file has all the supported channels and formatter supported by .NET remoting.Machine.config file can be found at C:\WINDOWS\Microsoft.NET\Framework\vXXXXX\CONFIG path. Find <system.runtime.remoting> element in the Machine.config file, which has the channels and the formatters. Below is a figure shown which can give a clear idea of how the file looks like.
Note:- Interviewer will not ask you to name all channels and formatters in machine.config but will definitely like to know in which file are all the formatter and channels specified, one sweet answer Machine.config can fetch you handsome job.

Page 76 of 397

Figure: - 4.6 Channels and Formatter in machine.config file

(A) How can you specify remoting parameters using Config files?
Both remoting server and remoting client parameters can be provided through config files. Below is a sample of server config file which provides all remoting parameter values which we where providing through code.
<configuration> <system.runtime.remoting> <application name=Server> <service> <wellknown

Page 77 of 397
mode=SingleCall type=Server.ClsServer, Server objectUri=RemoteObject /> </service> <channels> <channel ref=tcp server port=9000" /> </channels> </application> </system.runtime.remoting> </configuration>

Later this config file can be loaded using the following code.
RemotingConfiguration.Configure(AppDomain.CurrentDomain.SetupInformatio n.ApplicationBase & Server.config)

Same way we also have client.config file for loading the client remoting parameters.
<configuration>
<system.runtime.remoting> <application name=Client> <client url=tcp://localhost:9000/RemoteObject> <wellknown

type=CommonInterface.Icommon, Icommon
url = tcp://localhost:9000/Server/RemoteObject/> </client>

<channels> <channel ref=tcp client /> </channels> </application> </system.runtime.remoting> </configuration> client remoting can then load the configuration file by using :-Dim IobjCommon As CommonInterFace.Icommon Dim StrData As String
Dim objServiceEntries As WellKnownClientTypeEntry() RemotingConfiguration.Configure(AppDomain.CurrentDomain.SetupInformatio n.ApplicationBase & Client.config)

Page 78 of 397
objServiceEntries = RemotingConfiguration.GetRegisteredWellKnownClientTypes() IobjCommon = Activator.GetObject(GetType(Icommon), objServiceEntries(0).ObjectUrl.ToString())

StrData = IobjCommon.GetValue() Console.WriteLine( Serve side Data is & StrData) Console.ReadLine()

Note:- Complete source is provided in CD in folder RemotingObjectLifeTime.If you run Server and Client following output can be seen. All source is compiled using VS2005 BETA1

Figure: - 4.7 Output of Server and Client for RemotingObjectLifeTime project

(A) Can Non-Default constructors be used with Single Call SAO?


Twist: - What is the limitation of constructors for Single call SAO?
Non-Default constructors cannot be used with single call objects as object is created with every method call, there is no way to define Non-default constructors in method calls. It is possible to use Non-Default constructor with Client activated objects as both methods:NEW keyword and Activator.CreateInstance provide a way to specify Non-Default constructors.

Page 79 of 397

(I) How can we call methods in remoting asynchronously?


All previous examples are a synchronous method calls that means client has to wait until the method completes the process. By using Delegates, we can make Asynchronous method calls.

(A) What is Asynchronous One-Way Calls?


One-way calls are a different from asynchronous calls from execution angle that the .NET Framework does not guarantee their execution. In addition, the methods used in this kind of call cannot have return values or out parameters. One-way calls are defined by using [OneWay()] attribute in class.

(B) What is marshalling and what are different kinds of marshalling?


Marshaling is used when an object is converted so that it can be sent across the network or across application domains. Unmarshaling creates an object from the marshaled data. There are two ways to do marshalling: Marshal-by-value (MBV):- In this, the object is serialized into the channel, and a copy of the object is created on the other side of the network. The object to marshal is stored into a stream, and the stream is used to build a copy of the object on the other side with the unmarshalling sequence.

Marshaling-by-reference (MBR):- Here it creates a proxy on the client that is used to communicate with the remote object. The marshaling sequence of a remote object creates an ObjRef instance that itself can be serialized across the network. Objects that are derived from MarshalByRefObject are always marshaled by reference. All our previous samples have classes inherited from MarshalByRefObject To marshal a remote object the static method RemotingServices.Marshal () is used.RemotingServices.Marshal () has following overloaded versions:Public static ObjRef Marshal (MarshalByRefObject obi) Public static ObjRef Marshal (MarshalByRefObject obi, string objUri) Public static ObjRef Marshal (MarshalByRefObject obi, string objUri, Type requested Type)

The first argument obj specifies the object to marshal. The objUri is the path that is stored within the marshaled object reference; it can be used to access the remote object. The requested Type can be used to pass a different type of the object to the object reference. This is useful if the client using the remote object should not use the object class but an interface that the remote object class implements instead. In this scenario, the interface is the requested Type that should be used for marshaling.

(A) What is ObjRef object in remoting?


All Marshal () methods return ObjRef object. The ObjRef is serializable because it implements the interface ISerializable, and can be marshaled by value. The ObjRef knows about location of the remote object host name

Page 80 of 397 port number Object name.

(C) What is a Web Service?


Web Services are business logic components, which provide functionality via the Internet using standard protocols such as HTTP. Web Services uses Simple Object Access Protocol (SOAP) in order to expose the business functionality. SOAP defines a standardized format in XML, which can be exchanged between two entities over standard protocols such as HTTP. SOAP is platform independent so the consumer of a Web Service is therefore completely shielded from any implementation details about the platform exposing the Web Service. For the consumer it is simply a black box of send and receives XML over HTTP. So any web service hosted on windows can also be consumed by UNIX and LINUX platform.

(B) What is UDDI?


Full form of UDDI is Universal Description, Discovery, and Integration. A directory can be used to publish and discover public Web Services. If you want to see more details, you can visit the http://www.UDDI.org.

(B) What is DISCO?


DISCO is the abbreviated form of Discovery. It is used to club or group common services together on a server and provides links to the schema documents of the services it describes may require.

(B) What is WSDL?


Web Service Description Language (WSDL)is a W3C specification which defines XML grammar for describing Web Services.XML grammar describes details such as: Where we can find the Web Service (its URI)? What are the methods and properties that service supports? Data type support. Supported protocols In short, it is a bible of what the web service can do. Clients can consume this WSDL and build proxy objects that clients use to communicate with the Web Services. Full WSDL specification is available at http://www.w3.org/TR/wsdl.

(A) What the different phase/steps of acquiring a proxy object in Web service?
Following are the different steps needed to get a proxy object of a web service at the client side: Client communicates to UDI node for Web Service either through browser or through UDDIs public web service. UDII responds with a list of webservice.Where we can find the Web Service (it URI)?

Page 81 of 397 What are the methods and properties that service supports? Data type support. Supported protocols In short, it is a bible of what the web service can do. Clients can consume this WSDL and build proxy objects that clients use to communicate with the Web Services. Full WSDL specification is available at http://www.w3.org/TR/wsdl.

(A) What the different phase/steps of acquiring a proxy object in Web service?
Following are the different steps needed to get a proxy object of a web service at the client side: Client communicates to UDI node for Web Service either through browser or through UDDIs public web service. UDII responds with a list of web service. Every service listed by web service has a URI pointing to DISCO or WSDL document. After parsing the DISCO document, we follow the URI for the WSDL document related to the web service, which we need. Client then parses the WSDL document and builds a proxy object, which can communicate with Web service.

(C) What is file extension of Web services?


.ASMX is extension for Webservices.
Note :After this we are going to deal with a sample of web service. In VS2005, web project is created from the menu itself as compared to 2003 where it was present in the explorer.

Figure: - 4.8 Create Web project menu in VS2005

Page 82 of 397

(B) Which attribute is used in order that the method can be used as WebService?
Web Method attributes has to be specified in order that the method and property can be treated as Web Service.

(A) What are the steps to create a web service and consume it?
Note:- For this question, this book will make a attempt by creating a simple web service and explaining steps to achieve it. A simple webservice will be created which takes two numbers and gives addition result of the two numbers. In CD sample web service project with folder name MathsWebService is provided and same will be explained below. Definitely thenterviewer will not expect such a detail answer but this book will explain you in detail so that you are on right track during interview.

This web service will add two numbers and give to the calling client. All the below steps are according to VS2005 beta editor: First, create a website by clicking on File -- New Website. From Visual Studio Installed Templates click on Asp.NET Web Service. See figure below. Name the figure as Mathis Web Service.

Figure: - 4.9 Create WebService Project By default, the .NET editor has made a default web service method called as "Hello Word" which returns a string data type. Let us rename "Service.vb" to "Maths.vb"

Page 83 of 397 and "Service.asmx" to "Maths.asmx". Lets replace the HelloWorld with following code below :<WebMethod()> _ Public Function AddTwoNumbers(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer Return Number1 + Number2 End Function

Figure: - 4.10 rename all your default Service to Maths After the web service is done click on add Web reference. Normally for components, we do an Add Reference and for Webservices, we do Add Web Reference.

Page 84 of 397

Figure: - 4.11 Click on Add Web Reference You will be shown with a list of web services, which are known to the solutions. As we are looking for our Maths web service, which exist in the same solution, we click Web services in this solution.

Figure: - 4.12 List of webservices for browsing Your editor has located the Maths webservice.Select the web service

Page 85 of 397

Figure: - 4.13 Solution is showing the availability of Maths Webservice.

After you have clicked on Maths web service you will see a search progress bar as shown in figure below. This process will start the web service, reference it and create a proxy for the client, so that using it client can absorb the web service.

Page 86 of 397

Figure: - 4.14 Starting the web service and creating the proxy for your solution. Finally, you are able to see your web service, which is ready for use. Click on Add Reference and you will see a Local host reference in your .NET solution.

Figure: - 4.15 Starting the webservice and creating the proxy for your solution. We need to make a client who will absorb this Maths Webservice. Add WebserviceClient.aspx and create a UI as shown below. In the button, click put in the following code. LocalHost.ClsMaths is the proxy object by which you can make calls to the webservice.

Page 87 of 397

Sub cmdCalculate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim pobjMaths As New localhost.ClsMaths
lblResultDisplay.Text = Convert.ToString(pobjMaths.AddTwoNumbers(Convert.ToInt16(txtNumber1.Tex t), Convert.ToInt16(txtNumber2.Text)))

End Sub

Figure: - 4.16 Complete Webservice in action.


Note:- The whole point of creating this Maths Webservice step by step was to have a understanding of practical angle of how webservices are created. Its very rare that you will be asked to explain every step of how to write a webservice. But in case your interviewer is too bend down to also know what are the actual steps in creating a Webservice.

(A) Do webservice have state?


Twist: - How can we maintain State in Web services?
Web services as such do not have any mechanism by which they can maintain state. Web services can access ASP.NET intrinsic objects like Session, application and so on if they inherit from Web Service base class.
<%@ Webservice class="TestWebServiceClass" %> Imports System.Web.Services Public class TestWebServiceClass Inherits WebService

<WebMethod> Public Sub SetSession(value As String)

Page 88 of 397
session("Val") = Value End Sub end class

Above is a sample code, which sets as session object called as val. TestWebserviceClass is inheriting from Web Service to access the session and application objects.

Chapter 5: Caching Concepts


(B) What is an application object?
Application object can be used in situation where we want data to be shared across users globally.

(I) what is the difference between Cache object and application object?
The main difference between the Cache and Application objects is that the Cache object provides cache-specific features, such as dependencies and expiration policies.

(I) How can get access to cache object?


The Cache object is defined in the System.Web.Caching namespace. You can get a reference to the Cache object by using the Cache property of the HttpContext class in the System.Web namespace or by using the Cache property of the Page object.

(A) What are dependencies in cache and types of dependencies?


When you add an item to the cache, you can define dependency relationships that can force that item to be removed from the cache under specific activities of dependencies. Example if the cache object is dependent on file and when the file data changes you want the cache object to be update. Following are the supported dependency: File dependency: - Allows you to invalidate a specific cache item when a disk based file or files change. Time-based expiration: - Allows you to invalidate a specific cache item depending on predefined time. Key dependency:- Allows you to invalidate a specific cache item depending when another cached item changes.

(A)Can you show a simple code showing file dependency in cache?


Partial Class Default_aspx

Public Sub displayAnnouncement() Dim announcement As String If Cache(announcement) Is Nothing Then

Page 89 of 397
Dim file As New _ System.IO.StreamReader _ (Server.MapPath(announcement.txt)) announcement = file.ReadToEnd file.Close() Dim depends As New _ System.Web.Caching.CacheDependency _ (Server.MapPath(announcement.txt)) Cache.Insert(announcement, announcement, depends) End If Response.Write(CType(Cache(announcement), String)) End Sub

Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init displayAnnouncement() End Sub End Class

Note:- Above source code can be obtained from CD in CacheSample folder.Announcement.txt is in the same folder which you can play around to see the results.

Above given method displayAnnouncement() displays banner text from Announcement.txt file which is lying in application path of the web directory. Above method, first checks whether the Cache object is nothing, if the cache object is nothing then it moves further to load the cache data from the file. Whenever the file data changes the cache object is removed and set to nothing.

(A) What is Cache Callback in Cache?


Cache object is dependent on its dependencies example file based, time based etc...Cache items remove the object when cache dependencies change.ASP.NET provides capability to execute a callback method when that item is removed from cache.

(A) What is scavenging?


When server running your ASP.NET application runs low on memory resources, items are removed from cache depending on cache item priority. Cache item priority is set when you add item to cache. By setting the cache item priority controls, the items scavenging are removed according to priority.

Page 90 of 397

(B) What are different types of caching using cache object of ASP.NET?
You can use two types of output caching to cache information that is to be transmitted to and displayed in a Web browser: Page Output Caching Page output caching adds the response of page to cache object. Later when page is requested page is displayed from cache rather than creating the page object and displaying it. Page output caching is good if the site is fairly static. Page Fragment Caching If parts of the page are changing, you can wrap the static sections as user controls and cache the user controls using page fragment caching.

(B) How can you cache different version of same page using ASP.NET cache object?
Output cache functionality is achieved by using OutputCache attribute on ASP.NET page header. Below is the syntax
<%@ OutputCache Duration="20" Location="Server" VaryByParam="state" VaryByCustom="minorversion" VaryByHeader="Accept-Language"%>

VaryByParam: - Caches different version depending on input parameters send through HTTP POST/GET. VaryByHeader: - Caches different version depending on the contents of the page header. VaryByCustom: -Lets you customize the way the cache handles page variations by declaring the attribute and overriding the GetVaryByCustomString handler. VaryByControl: -Caches different versions of a user control based on the value of properties of ASP objects in the control.

(B) How will implement Page Fragment Caching?


Page fragment caching involves the caching of a fragment of the page, rather than the entire page. When portions of the page are need to be dynamically created for each user request this is best method as compared to page caching. You can wrap Web Forms user control and cache the control so that these portions of the page do not need to be recreated each time.

(B) Can you compare ASP.NET sessions with classic ASP?


ASP.NET session caches per user session state. It basically uses HttpSessionState class. Following are the limitations in classic ASP sessions: ASP session state is dependent on IIS process very heavily. So if IIS restarts ASP session variables are also recycled.ASP.NET session can be independent of the hosting environment thus ASP.NET session can be maintained even if IIS reboots.

Page 91 of 397 ASP session state has no inherent solution to work with Web Farms.ASP.NET session can be stored in state server and SQL SERVER which can support multiple server. ASP session only functions when browser supports cookies.ASP.NET session can be used with browser side cookies or independent of it.

(C) Which are the various modes of storing ASP.NET session?


InProc: - In this mode Session, state is stored in the memory space of the Aspnet_wp.exe process. This is the default setting. If the IIS reboots or web application restarts then session state is lost. StateServer:-In this mode Session state is serialized and stored in a separate process (Aspnet_state.exe); therefore, the state can be stored on a separate computer(a state server). SQL SERVER: - In this mode Session, state is serialized and stored in a SQL Server database.

Session state can be specified in <sessionState> element of application configuration file. Using State Server and SQL SERVER session state can be shared across web farms but note this comes at speed cost as ASP.NET needs to serialize and deserialize data over network repeatedly.

(A) Is Session_End event supported in all session modes?


Session_End event occurs only in Inproc mode. State Server and SQL SERVER do not have Session_End event.

(A) What are the steps to configure StateServer Mode?


Following are the things to remember so that StateServer Mode works properly: StateServer mode session data is stored in a different process so you must ensure that your objects are serializable. <machineKey> elements in Web.config should be identical across all servers. So this ensures that encryption format is same across all computers. IIS metabase (\LM\W3SVC\2) must be identical across all servers in that farm.

(B) What are the steps to configure SQLServer mode?


Following are the things to remember so that SQLSERVER Mode works properly: SQLSERVER mode session data is stored in a different process so you must ensure that your objects are serializable. IIS metabase (\LM\W3SVC\2) must be identical across all servers in that farm. By default Session objects are stored in Tempdb, you can configure it store outside TempDB by running Microsoft provided SQL script.

Note:- TempDB database is re-created after SQL SERVER computer reboot.If you want to maintain session state with every reboot best is to run SQL Script and store session objects outside TempDB database.

Page 92 of 397

(A) Where do you specify session state mode in ASP.NET?


<sessionState mode=SQLServer stateConnectionString=tcpip=192.168.1.1:42424" sqlConnectionString=data source=192.168.1.1; Integrated Security=SSPI cookieless=false timeout=20" />

Above is sample session state mode specified for SQL SERVER.

(B) What are the other ways you can maintain state?
Other than session variables, you can use the following technique to store state: Hidden fields View state Hidden frames Cookies Query strings

(C) What are benefits and Limitation of using Hidden fields?


Following are the benefits of using Hidden fields: They are simple to implement. As data is cached on client side, they work with Web Farms. All browsers support hidden field. No server resources are required.

Following are limitations of Hidden field: They can be tampered creating a security hole. Page performance decreases if you store large data, as the data are stored in pages itself. Hidden fields do not support rich structures as HTML hidden fields are only single valued. Then you have to work around with delimiters etc to handle complex structures.

Below is how you will actually implement hidden field in a project


<input id="HiddenValue" type="hidden" value="Initial Value" runat="server"NAME="HiddenValue">

(B) What is ViewState?


Viewstate is a built -in structure for automatically retaining values amongst the multiple requests for the same page. The viewstate is internally maintained as a hidden field on the page but is hashed, providing greater security than developer-implemented hidden fields do.

Page 93 of 397

(A) Does the performance for viewstate vary according to User controls?
Performance of viewstate varies depending on the type of server control to which it is applied. Label, TextBox, CheckBox, RadioButton, and HyperLink are server controls that perform well with ViewState. DropDownList, ListBox, DataGrid, and DataList suffer from poor performance because of their size and the large amounts of data making roundtrips to the server.

(B) What are benefits and Limitation of using Viewstate for state management?
Following are the benefits of using Viewstate: No server resources are required because state is in a structure in the page code. Simplicity. States are retained automatically. The values in view state are hashed, compressed, and encoded, thus representing a higher state of security than hidden fields. View state is good for caching data in Web frame configurations because the data is cached on the client.

Following are limitation of using Viewstate: Page loading and posting performance decreases when large values are stored because view state is stored in the page. Although view state stores data in a hashed format, it can still be tampered because it is stored in a hidden field on the page. The information in the hidden field can also be seen if the page output source is viewed directly, creating a potential security risk.

Below is sample of storing values in view state.

this.ViewState["EnterTime"] = DateTime.Now.ToString();

(B) How can you use Hidden frames to cache client data ?
This technique is implemented by creating a Hidden frame in page which will contain your data to be cached.
<FRAMESET cols="100%,*,*"> <FRAMESET rows="100%"> <FRAME src="data_of_frame1.html"></FRAMESET> <FRAME src="data_of_hidden_frame.html"> <FRAME src="data_of_hidden_frame.html" frameborder="0" noresize scrolling="yes"> </FRAMESET>

Above is a sample of hidden frames where the first frame data_of _frame1.html is visible and the remaining frames are hidden by giving whole col section to first frame. 100 % is allocated to first frame and remaining frames thus remain hidden.

Page 94 of 397

(I) What are benefits and limitations of using Hidden frames?


Following are the benefits of using hidden frames: You can cache more than one data field. The ability to cache and access data items stored in different hidden forms. The ability to access JScript variable values stored in different frames if they come from the same site.

The limitations of using hidden frames are: Hidden frames are not supported on all browsers. Hidden frames data can be tampered thus creating security hole.

(J)What are benefits and limitations of using Cookies?


Following are benefits of using cookies for state management: No server resources are required as they are stored in client. They are light weight and simple to use

Following are limitation of using cookies: Most browsers place a 4096-byte limit on the size of a cookie, although support for 8192byte cookies is becoming more common in the new browser and client-device versions available today. Some users disable their browser or client devices ability to receive cookies, thereby limiting the use of cookies. Cookies can be tampered and thus creating a security hole. Cookies can expire thus leading to inconsistency.

Below is sample code of implementing cookies


Request.Cookies.Add(New HttpCookie(name, user1))

(I) What is Query String and What are benefits and limitations of using Query Strings?
A query string is information sent to the server appended to the end of a page URL. Following are the benefits of using query string for state management: No server resources are required. The query string containing in the HTTP requests for a specific URL. All browsers support query strings.

Following are limitations of query string: Query string data is directly visible to user thus leading to security problems.Most browsers and client devices impose a 255-character limit on URL length.

Page 95 of 397 Below is a sample Login query string passed in URL http://www.querystring.com/login.asp?login=testing. This query string data can then be requested later by using Request.QueryString(login).

(I) What is Absolute and Sliding expiration?


Absolute Expiration allows you to specify the duration of the cache, starting from the time the cache is activated. The following example shows that the cache has a cache dependency specified, as well as an expiration time of one minute.

Cache.Insert("announcement", announcement, depends, _ DateTime.Now.AddMinutes(1), Nothing)

Sliding Expiration specifies that the cache will expire if a request is not made within a specified duration. Sliding expiration policy is useful whenever you have a large number of items that need to be cached, because this policy enables you to keep only the most frequently accessed items in memory. For example, the following code specifies that the cache will have a sliding duration of one minute. If a request is made 59 seconds after the cache is accessed, the validity of the cache would be reset to another minute:
Cache.Insert("announcement", announcement, depends, _ DateTime.MaxValue, _ TimeSpan.FromMinutes(1))

(I) What is cross page posting?


Note :- This is a new feature in ASP.NET 2.0

By default, button controls in ASP.NET pages post back to the same page that contains the button, where you can write an event handler for the post. In most cases this is the desired behavior, but occasionaly you will also want to be able to post to another page in your application. The Server.Transfer method can be used to move between pages, however the URL does not change. Instead, the cross page- posting feature in ASP.NET 2.0 allows you to fire a normal post back to a different page in the application. In the target page, you can then access the values of server controls in the source page that initiated the post back. To use cross page posting, you can set the PostBackUrl property of a Button, LinkButton or ImageButton control, which specifies the target page. In the target page, you can then access the PreviousPage property to retrieve values from the source page. By default, the PreviousPage property is of type Page, so you must access controls using the FindControl method. You can also enable strongly-typed access to the source page by setting the @PreviousPageType directive in the target page to the virtual path or Type name of the source page. Here is a systematic guide for implementing the cross-page post back using controls that implement the IButtonControl interface. Create a Web Form and insert a Button control on it using the VS .NET designer. Set the button's PostBackUrl property to the Web Form you want to post back. For instance in this case it is "nextpage.aspx"

Page 96 of 397
<asp:Button ID="Button1" runat="server" PostBackUrl="~/nextpage.aspx" Text="Post to nextpage" />

When the PostBackUrl property of the IButtonControl is set, the ASP.NET framework binds the corresponding HTML element to new JavaScript function named WebForm_DoPostBackWithOptions. The corresponding HTML rendered by the ASP.NET 2.0 will look like this:
<input type="submit" name="Button1" value="Post to Page 2" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("Button1", ",false,"Page2.aspx", false, false))" id="Button1" />

(I) How do we access viewstate value of this page in the next page ?
View state is page specific; it contains information about controls embedded on the particular page. ASP.NET 2.0 resolves this by embedding a hidden input field name, __POSTBACK. This field is embedded only when there is an IButtonControl on the page and its PostBackUrl property is set to a non- null value. This field contains the view state information of the poster page. To access the view state of the poster page, you can use the new PreviousPage property of the page:
Page poster = this.PreviousPage;

Then you can find any control from the previous page and read its state:
Label posterLabel = poster.findControl("myLabel"); string lbl = posterLabel.Text;

This cross-page post back feature also solves the problem of posting a Form to multiple pages, because each control, in theory, can point to different post back URL.

(I) Can we post and access view state in another application?


You can post back to any page and pages in another application, too. However, if you are posting pages to another application, the PreviousPage property will return null. This is a significant restriction, as it means that if you want to use the view state, you are confined, for example, posting to pages in the same virtual directory. Even so, this is a highly acceptable addition to the functionality of ASP.NET.

(I) What is SQL Cache Dependency in ASP.NET 2.0?


SQL cache dependencies is a new feature in ASP.NET 2.0 which can automatically invalidate a cached data object (such as a Dataset) when the related data is modified in the database. So for instance if you have a dataset, which is tied up to, a database tables any changes in the database table will invalidate the cached data object which can be a dataset or a data source.

(I) How do we enable SQL Cache Dependency in ASP.NET 2.0?


Below are the broader steps to enable a SQL Cache Dependency: Enable notifications for the database. Enable notifications for individual tables.

Page 97 of 397 Enable ASP.NET polling using web.config file Finally use the Cache dependency object in your ASP.NET code

Enable notifications for the database. Before you can use SQL Server cache invalidation, you need to enable notifications for the database. This task is performed with the aspnet_regsql.exe command-line utility, which is located in the c:\[WinDir]\Microsoft.NET\Framework\[Version] directory.
aspnet_regsql -ed -E -d Northwind

-ed :- command-line switch E: - Use trusted connection

-S: - Specify server name it other than the current computer you are working on -d: - Database Name

So now, let us try to understand what happens in the database because of aspnet_regsql.exe. After we execute the aspnet_regsql -ed -E -d Northwind command you will see one new table and four new stored procedures created.

Figure 5.1: - SQL Cache table created for notification Essentially, when a change takes place, a record is written in this table. The SQL Server polling queries this table for changes.

Page 98 of 397

Figure 5.2: - New stored procedures created Just to make brief run of what the stored procedures do. AspNet_SqlCacheRegisterTableStoredProcedure :- This stored procedure sets a table to support notifications. This process works by adding a notification trigger to the table, which will fire when any row is inserted, deleted, or updated. AspNet_SqlCacheUnRegisterTableStoredProcedure: - This stored procedure takes a registered table and removes the notification trigger so that notifications won't be generated. AspNet_SqlCacheUpdateChangeIdStoredProcedure:- The notification trigger calls this stored procedure to update the AspNet_SqlCacheTablesForChangeNotification table, thereby indicating that the table has changed. AspNet_SqlCacheQueryRegisteredTablesStoredProcedure:- This extracts just the table names from the AspNet_SqlCacheTablesForChangeNotification table. It is used to get a quick look at all the registered tables. AspNet_SqlCachePollingStoredProcedure:- This will get the list of changes from the AspNet_SqlCacheTablesForChangeNotification table. It is used to perform polling. Enabling notification for individual tables Once the necessary stored procedure and tables are created then we have to notify saying which table needs to be enabled for notifications. That can be achieved by two ways: aspnet_regsql -et -E -d Northwind -t Products Exec spNet_SqlCacheRegisterTableStoredProcedure 'TableName'

Registering tables for notification internally creates triggerfor the tables. For instance, for a products table the following trigger is created. So any modifications done to the Products table will update the AspNet_SqlCacheNotification table. CREATE TRIGGER