Category Archives: ASP.Net

Phần 9. Có những lỗi của SharePoint rất hiểm mà chỉ có IIS và ASPX.Net mới hiểu được ?


Một trong những lỗi mà dân lập trình, triển khai và quản trị MS SharePoint khó phát hiện ra cách sửa lỗi nhất đó là:

“Khi tạo ra 1 Portal site trên chính máy chủ SharePoint Farm, cài, cấu hình và khởi tạo đầy đủ các template site. Đăng nhập lại trang portal đó bằng chính account system admin của AD

đều bó tay không thể mở được, cho dù nhập rất đúng mật khẩu và kiểu account sAMAccountName hay UPN hay kiểu Email domain…” mọi thứ khác đều chạy ổn, riêng vấn đề này không ổn”.

SPS2010_not_access

Tại sao vậy ?

Nguyên nhân:

Khi bạn sử dụng tên miền đầy đủ (FQDN) hoặc một tiêu đề tùy chỉnh /IP để truy cập một trang web localhost được lưu trữ trên một máy tính đang chạy Microsoft Internet Information Services (IIS) 5.x, 6.x, 7.x, 8.x hoặc một phiên bản sau này, bạn có thể nhận được một thông báo lỗi tương tự như sau:

HTTP 401.1 – Unauthorized: Logon Failed

Vấn đề này xảy ra khi các trang web đó có sử dụng tích hợp xác thực “Integrate Windows Authentication” và có một cái tên được ánh xạ đến địa chỉ loopback localhost.

Chú ý: Bạn chỉ nhận được thông báo lỗi này nếu bạn cố gắng để duyệt qua các trang web trực tiếp trên chính máy chủ host URL đó.

Nếu bạn duyệt qua các trang web từ một máy tính khác, các trang Web đó vẫn sẽ hoạt động như bình thường.

Luận thuyết về lỗi trên SharePoint Farm:

Vấn đề này xảy ra nếu bạn cài đặt Microsoft Windows Server 2003 Service Pack 1 (SP1). Windows Server 2003, Windows 2008 server/R2 và MS SharePoint bao gồm một tính năng bảo mật kiểm tra loopback được thiết kế để giúp ngăn chặn các cuộc tấn công ánh xạ ngay trên máy tính chủ dịch vụ của bạn.

Vì vậy, xác thực không thành công nếu FQDN hoặc header tùy chỉnh mà bạn sử dụng không phù hợp với tên máy tính localhost.

Cách xử lý:

Bạn hãy mở Registry của chính máy chủ windows server 2008 standard/r2 đang chạy

SPS2010_not_access1

Có hai phương pháp để xử lý vấn đề này, sử dụng một trong các phương pháp sau đây sao cho thích hợp với tình hình của bạn.

Phương pháp 1: Xác định tên host (phương pháp Preferred nếu NTLM xác thực được mong muốn):

Để xác định tên máy chủ được ánh xạ đến địa chỉ loopback và có thể kết nối đến các trang web trên máy chủ của bạn, hãy làm theo các bước sau:

1. Thiết lập DisableStrictNameChecking trong registry với giá trị  1.

2. Nhấp vào Bắt đầu, bấm Chạy, loại regedit, và sau đó nhấn OK.

3. Trong Registry Editor, xác định vị trí và sau đó nhấp vào khóa registry sau đây:  HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0

4. Kích chuột phải vào MSV1_0, chọn New, và sau đó nhấp vào Multi-String Value.

5. Gõ BackConnectionHostNames, và sau đó nhấn ENTER.

6. Kích chuột phải vào BackConnectionHostNames, và sau đó nhấp vào Modify.

7. Trong value gõ tên máy chủ hoặc các tên máy chủ cho các trang web có trên máy tính localhost, và sau đó nhấn OK.

8. Thoát khỏi Registry Editor, và sau đó khởi động lại dịch vụ IISAdmin.

Phương pháp 2: Vô hiệu hoá việc kiểm tra loopback (phương pháp ít được đề nghị – nhưng phù hợp với trường hợp của Microsoft SharePoint)

Phương pháp thứ hai là để vô hiệu hóa việc kiểm tra loopback bằng cách thiết lập các khóa registry DisableLoopbackCheck.
Để thiết lập các khóa registry DisableLoopbackCheck, hãy làm theo các bước sau:

  1. Thiết lập DisableStrictNameChecking sửa trong registry để giá trị bằng 1.
  2. Nhấp vào Bắt đầu, bấm Chạy, loại regedit, và sau đó nhấn OK.
  3. Trong Registry Editor, xác định vị trí và sau đó nhấp vào khóa registry sau đây:  HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa
  4. Kích chuột phải vào Lsa, chọn New, sau đó bấm Value DWORD.
  5. Gõ DisableLoopbackCheck, và sau đó nhấn ENTER.
  6. Kích chuột phải vào DisableLoopbackCheck, và sau đó nhấp vào Modify.
  7. Trong phần Data value nhập giá trị bằng 1, và sau đó nhấn OK.
  8. Thoát khỏi Registry Editor, và sau đó khởi động lại máy chủ của bạn.
  9. SPS2010_not_access2

Thực tế, mình sửa tới đây rồi và lưu lại register đợi sau 5 phút thì mở lại trang Portal site của Microsoft SharePoint thì đăng nhập được luôn (không khởi động lại máy chủ SharePoint).

P.S: Các bạn hãy đến học chương trình MS SharePoint tại ROBUSTA để có những kinh nghiệm thực tế, vững vàng trong công tác phát triển thông tin thông tấn tại Doanh nghiệp bạn.

Chúc các bạn yêu MS SharePoint yêu luôn cả lỗi bực mình này nhé !

Phương pháp việt hoá toàn bộ ứng dụng SharePoint 2010


 

Bước 1:

Resource Translation Utility

The Resource Translation Utility enables you to quickly translate any KWizCom add-on for SharePoint 2010/2013 to any required language, by using the Microsoft Translation Services.

(Actually, this utility translates Any .NET resource file)

KWizCom Resource Translator Dialog

To start using this utility, you need to:

1. Run it on a machine that has internet access.

2. Get an account on Windows Azure Marketplace (so you’ll be able to use the Microsoft Translation Services)

Installation

  1. Download this Free utility and unzip the file on your PC/Server.
  2. Download the User Guide.
  3. Run the.msi installation file to install the utility.

 

 

Bước 2:

 

Get an account on Windows Azure Marketplace.

The Microsoft Translator API is accessible through Microsoft Windows Azure Marketplace. You can see it here: https://datamarket.azure.com/.

To begin developing using the Microsoft Translator API, you need to do the following:

  1. Register for an account on Windows Azure Marketplace.
    • If you already have an account, you can use it, but it’s recommended that you follow through these steps to ensure that you configure the service correctly
  2. Sign up for the Microsoft Translator API using your registered account.
  3. Register your application on Windows Azure Marketplace.
  4. Get the Client ID and Client Secret for your registered application.

The following instructions will show you how to do this. When you’ve completed them, you’ll be ready to start coding.

Step 1. Sign in and Register.

Sign-in to Windows Azure Marketplace. If this is your first time, you’ll likely see this registration page.

Fill out your details, and press the ‘Continue’ button.

clip_image002

You’ll be taken to the Terms of Use page. Read it carefully, and if you accept it, check the box at the bottom of the screen that says ‘I accept the Terms of Use’, and press the ‘Register’ button.

clip_image003

Once you’ve done this, you’ll be taken back to the main Windows Azure Marketplace webpage.

Step 2. Subscribe to the Microsoft Translator API.

In this section you’ll subscribe to the Microsoft Translator API in the Windows Azure Marketplace. There are a number of service options you can choose, and in this walkthrough you’ll see how to use the free one.

Step 2.1. Find the Microsoft Translator API service in the Windows Azure Marketplace

If you’ve completed the Windows Azure Marketplace registration (Step 1), then visit https://datamarket.azure.com/ to see the main Marketplace home page. At the top of the screen, you’ll see a ‘Search’ box.

Type ‘translator’ into this box and press enter, or click the button on the right that is shaped like a magnifying glass.

clip_image004

In the search results, you’ll see the Microsoft Translator API:

clip_image006

Step 2.2. Subscribe to the Translator API service.

Click on ’Microsoft Translator’ and you’ll be taken to the Microsoft Translator API Offer page on Windows Azure Marketplace.

(Note: For a short cut, you can also go directly to the screen by visiting this URL: https://datamarket.azure.com/dataset/bing/microsofttranslator)

On the right hand side of the screen, you’ll see a number of different monthly volume offers. Choose the one that meets your monthly volume usage needs. For this guide, you’ll use the free 2 million characters per month subscription offer, which you can find at the bottom of the list.

clip_image007

Press the ‘Sign Up’ link on your chosen offer and you’ll be taken to a page where you are asked to confirm and agree that you will adhere to the Translator API ‘Offer Terms and Privacy Policy’.

If you agree, check the box and press the Sign Up button.

clip_image008

You’ll then be taken to the page confirming that you’ve successfully subscribed to the service and the volume goes into effect at that time. In the next step, you’ll get your developer credentials from Windows Azure Marketplace, and you’ll use these when building your apps.

clip_image010

Step 3. Getting your Developer Credentials

This step assumes that you have:

· Completed Steps 1 and 2

· You have registered for a Windows Azure Marketplace account

· You have used your Marketplace account to subscribe to the Microsoft Translator API service.

Step 3.1. Registering your application on the Windows Azure Marketplace.

Sign in to https://datamarket.azure.com/, and you’ll see the familiar welcome page.

At the bottom of the page, you’ll see a number of links, organized into columns.

clip_image012

One of these reads ‘Develop’, and under it you’ll see a link that says ‘Register your Application’.

Select this and you’ll be taken to the screen that allows you register your application.

clip_image013

Step 3.2. Getting your Client ID and Client Secret

You use this to get the Client ID and Client Secret values that your application will need to authenticate your service when you build your application.

· Fill out the Client ID, and Name fields.

· The Client Secret field is already completed for you. Do not change it.

· Fill out the ‘Redirect URI’ field with any valid URL that uses https, for example https://microsoft.com. This field is not used by the Microsoft Translator API.

· You can also leave the ‘Enable subdomain access’ checkbox unchecked, as Translator doesn’t use it.

Remember and note the Client ID and Client Secret fields. You will need these when you write your app.

Here’s an example:

clip_image014

If, in the future you want to create new apps, you can go straight to this screen: https://datamarket.azure.com/developer/applications/register

To see a list of the apps you have on Marketplace, and see their Client ID and Client Secret visit: https://datamarket.azure.com/developer/applications and press the ‘Edit’ link to see the details for your app.

Next, you’ll be taken to a page containing the list of your applications. (Note: For future reference, here’s a shortcut: https://datamarket.azure.com/developer/applications)

You should see your application at the bottom of this screen, like this. If you want to change the Client ID, you can do so from the ’Edit’ link, or you can register new applications with the Register button.

clip_image016

Getting Started with Microsoft Translator – Part 2: Writing an ASP.NET Application

 

Bước 3:

Creating an ASP.NET Web Application

If you don’t have Visual Studio, you can use the free Visual Web Developer Express from Microsoft to create ASP.NET pages. It can be downloaded from here: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-web-developer-express

The first step is to create a new Project, and in the project types dialog box, select ASP.NET Web Application and call it FirstTranslator. Make sure that you selected ‘.NET Framework 4’ as the version of .NET you are using.

Tham khảo link sau để sử dụng:   http://blogs.msdn.com/b/translation/p/gettingstarted2.aspx

ASP.NET authentication and authorization


ASP.NET authentication and authorization

Introduction

Authentication and Authorization

Detecting authentication and authorization: – The principal and identity objects

Types of authentication and authorization in ASP.NET

Windows Authentication

Forms Authentication

Passport Authentication

Source code

References

This video demonstrates single sign on using Forms authentication


Video on ASP.NET Basic authentication cracked


Introduction

This article will discuss how to implement ASP.NET authentication and authorization. This article initially starts with authentication and authorization concepts and later explains the three important ways of doing authentication and authorization i.e. windows, forms and passport. As the article moves ahead it explains basic, digest and integrated authentication in depth. This article also dives in depth on how forms authentication can be used to implement custom authentication and single-sign on authentication. One of the important concepts this article touch bases is ticket generation in cookies and how ASP.NET membership and role can help us to increase productivity.

This is a small Ebook for all my .NET friends which covers topics like WCF,WPF,WWF,Ajax,Core .NET,SQL etc you can download the same from here or else you can catch me on my daily free training @ from here

Authentication and Authorization

Before proceeding ahead we need to understand four important vocabularies which you will see in this article again and again: – authentication, authorization, principal and identity. Let’s first start with authentication and authorization. If you search in http://www.google.com for the dictionary meaning of authentication and authorization, you will land up with something below:-

Authentication: – prove genuineness

Authorization: – process of granting approval or permission on resources.

The same dictionary meaning applies to ASP.NET as well. In ASP.NET authentication means to identify the user or in other words its nothing but to validate that he exists in your database and he is the proper user.
Authorization means does he have access to a particular resource on the IIS website. A resource can be an ASP.NET web page, media files (MP4, GIF, JPEG etc), compressed file (ZIP, RAR) etc.
So the first process which happens is authentication and then authorization. Below is a simple graphical representation of authentication and authorization. So when the user enters ‘userid’ and ‘password’ he is first authenticated and identified by the user name.
Now when the user starts accessing resources like pages, ASPDOTNETauthentication, videos etc, he is checked whether he has the necessary access for the resources. The process of identifying the rights for resources is termed as ‘Authorization’.

To put it in simple words to identify “he is shiv” is authentication and to identify that “Shiv is admin” is authorization.

Detecting authentication and authorization: – The principal and identity objects

At any moment of time if you want to know who the user is and what kind of authentication type he using you can use the identity object. If you want to know what kind of roles it’s associated with then we need to use the principal object. In other words to get authentication details we need to the identity object and to know about authorization details of that identity we need the principal object.

For instance below is a simple sample code which shows how to use identity and principal object to display name and check roles.

Response.Write(User.Identity.Name +"<br>");
Response.Write(User.Identity.AuthenticationType + "<br>");
Response.Write(User.Identity.IsAuthenticated + "<br>");
Response.Write(User.IsInRole("Administrators") + "<br>"); 

Now if you run this code in IIS under anonymous mode it will display no details as shown below.

If you run the above code in IIS using some authentication mode like one shown below “Basic authentication” it will show all the details as shown below.

Types of authentication and authorization in ASP.NET

There are three ways of doing authentication and authorization in ASP.NET:-
Windows authentication: – In this methodology ASP.NET web pages will use local windows users and groups to authenticate and authorize resources.

Forms Authentication: – This is a cookie based authentication where username and password are stored on client machines as cookie files or they are sent through URL for every request. Form-based authentication presents the user with an HTML-based Web page that prompts the user for credentials.

• Passport authentication :- Passport authentication is based on the passport website provided
by the Microsoft .So when user logins with credentials it will be reached to the passport website ( i.e. hotmail,devhood,windows live etc) where authentication will happen. If Authentication is successful it will return a token to your website.

Anonymous access: – If you do not want any kind of authentication then you will go for Anonymous access.

GenericPrincipal and GenericIdentity objects represent users who have been authenticated using Forms authentication or other custom authentication mechanisms. With these objects, the role list is obtained in a custom manner, typically from a database.
FormsIdentity and PassportIdentity objects represent users who have been authenticated with Forms and Passport authentication respectively.

Windows Authentication

When you configure your ASP.NET application as windows authentication it will use local windows user and groups to do authentication and authorization for your ASP.NET pages. Below is a simple snap shot which shows my windows users and roles on my computer.

5 steps to enable authentication and authorization using Windows

We will do a small sample to get a grasp of how authentication and authorization works with windows. We will create 2 users one ‘Administrator’ and other a simple user with name ‘Shiv’. We will create two simple ASPX pages ‘User.aspx’ page and ‘Admin.aspx’ page. ‘Administrator’ user will have access to both ‘Admin.aspx’ and ‘User.aspx’ page , while user ‘Shiv’ will only have access to ‘User.aspx’ page.

Step 1:- Creation of web site.

The next step is to create a simple web site with 3 pages (User.aspx, Admin.aspx and Home.aspx) as shown below.

Step 2:- Create user in the windows directory

The next step is we go to the windows directory and create two users. You can see in my computer we have ‘Administrator’ and ‘Shiv’.

Step 3:- Setup the ‘web.config’ file

In ‘web.config’ file set the authentication mode to ‘Windows’ as shown in the below code snippets.

<authentication mode="Windows"/>

We also need to ensure that all users are denied except authorized users.

The below code snippet inside the authorization tag that all users are denied. ‘?’ indicates any

unknown user.
<authorization>
<deny users="?"/>
</authorization>

Step 4:- Setup authorization
We also need to specify the authorization part. We need to insert the below snippet in the ‘web.config’ file stating that only ‘Administrator’ users will have access to

‘Admin.aspx’ pages.
<location path="Admin.aspx">
<system.web>
<authorization>
<allow roles="questpon-srize2\Administrator"/>
<deny users="*"/>
</authorization>
</system.web>
</location>

Step 5:-Configure IIS settings
The next step is to compile the project and upload the same on an IIS virtual directory. On the IIS virtual directory we need to ensure to remove anonymous access and check the integrated windows authentication as shown in the below figure.


Now if you run the web application you will be popped with a userid and password box as shown below.

Once you enter credentials you should be able to see home.aspx as shown below.

In case you are not an administrator (i.e in this case its ‘shiv’) and you navigate to ‘Admin.aspx’ it will throw an error as shown in the below figure.

In case you want to read who the user is and with what authorization rights has he logged in you can use ‘WindowsPrincipal’ and ‘WindowsIdentity’. These two objects represent users who have been authenticated with Windows authentication. You can also get the roles these users have.

Different methods of collecting username and password

In the above step by step article you must have noticed the below options on IIS (Integrated, digest and basic). These three checkboxes decide how the windows username and password credentials are passed from the client desktop to the IIS.
There are three different way of passing the windows username and password to IIS:-
• Basic
• Digest
• Windows
In the coming session we will understand in depth what these 3 options are.

Basic Authentication

When basic authentication is selected the ‘userid’ and ‘password’ are passed by using Base64 encoded format . i.e. why the name is basic authentication. ‘Base64’ is a encoding and not encryption. So it’s very easy to crack. You can read more about ‘Base64’ encoding at http://en.wikipedia.org/wiki/Base64 . Its a very weak form of protection.

Below is a small demonstration how easy it is to crack a basic authentication. You can see in the below figure we have checked ‘Basicauthentication’ check and we ran the fiddler tool to see the data.

We then copied the ‘Authorization:Basic’ data and ran the below program. LOL, we can see our windows userid and password.

Below is the code snippet of how to decode ‘Base64’ encoding.

public static string DecodeFrom64(string encodedData)
{

byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);

string returnValue = System.Text.Encoding.ASCII.GetString(encodedDataAsBytes);

return returnValue;}

Base64 is an encoding mechanism and not encryption

Basic authentication in other words ‘Base64’ encoding is used to transmit binary data and convert them to text so that they can run over the network. Some protocols may interpret your binary data as control characters. For instance the FTP protocol for certain combination of binary characters can interpret the same as FTP line endings.

At the end of the days it’s not an encryption algorithm it’s an encoding mechanism. That’s why in our previous section we demonstrated how easy it was to decode basic authentication.

Digest Authentication

The problem associated with basic authentication is solved by using digest authentication. We saw in our previous section how easy it was to crack basic authentication. Digest authentication transfers data over wire as MD5 hash or message digest. This hash or digest is difficult to dechiper.
In other words digest authentication replaces the lame basic authentication.

Said and done there one of the big problems of digest authentication is it’s not supported on some browsers.

Integrated Authentication

Integrated Windows authentication (formerly called NTLM, and also known as Windows NT Challenge/Response authentication) uses either Kerberos v5 authentication or NTLM authentication, depending upon the client and server configuration.
(The above paragraph is ripped from
http://msdn.microsoft.com/en-us/library/ff647076.aspx ).
Let’s try to understand what NTLM and Kerberos authentication is all about and then we will try to understand other aspects of integrated authentication.
NTLM is a challenge response authentication protocol. Below is how the sequence of events happens:-
• Client sends the username and password to the server.
• Server sends a challenge.
• Client responds to the challenge with 24 byte result.
• Servers checks if the response is properly computed by contacting the domain controller.
• If everything is proper it grants the request.

Kerberos is a multi-hounded (3 heads) who guards the gates of hades. In the same way Kerberos security has 3 participants authenticating service, service server and ticket granting server. Let’s try to understand step by step how these 3 entities participate to ensure security.

Courtesy: – http://24-timepass.com/postimg/three-headed-dog.jpg
Kerberos uses symmetric key for authentication and authorization. Below is how the things work for Kerberos:-

• In step 1 client sends the username and password to AS (Authenticating service).
• AS authenticates the user and ensures that he is an authenticated user.
• AS then asks the TGT (Ticket granting service) to create a ticket for the user.
• This ticket will be used to verify if the user is authenticated or not. In other words in further client interaction no password will be sent during interaction.

Order of Precedence

One of the things which you must have noticed is that integrated, digest and basic authentication are check boxes. In other words we can check all the three at one moment of time. If you check all the 3 options at one moment of time depending on browser security support one of the above methods will take precedence.

Let’s understand how the security precedence works as per browser security.
• Browser makes a request; it sends the first request as Anonymous. In other words it does not send any credentials.

• If the server does not accept Anonymous IIS responds with an “Access Denied” error message and sends a list of the authentication types that are supported by the browser.

• If Windows NT Challenge/Response is the only one supported method then the browser must support this method to communicate with the server. Otherwise, it cannot negotiate with the server and the user receives an “Access Denied” error message.

• If Basic is the only supported method, then a dialog box appears in the browser to get the credentials, and then passes these credentials to the server. It attempts to send these credentials up to three times. If these all fail, the browser is not connected to the server.

• If both Basic and Windows NT Challenge/Response are supported, the browser determines which method is used. If the browser supports Windows NT Challenge/Response, it uses this method and does not fall back to Basic. If Windows NT Challenge/Response is not supported, the browser uses Basic.
You can read more about precedence from
http://support.microsoft.com/kb/264921.

In order words the precedence is:-

1. Windows NT challenge ( Integrated security)
2. Digest
3. Basic

Comparison of Basic, digest and windows authentication

Browse support Authentication mechanism
Basic Almost all browsers Weak uses Base64.
Digest IE 5 and later version Strong MD5
Integrated windows

• Kerberos

IE5 and above Ticket encryption using AD , TGT and KDC

• Challenge / response

IE5 and above Send a challenge

Forms Authentication

Forms authentication is a cookie/URL based authentication where username and password are stored on client machines as cookie files or they are sent encrypted on the URL for every request if cookies are not supported.
Below are the various steps which happen in forms authentication:-
• Step 1:- User enters “userid” and “password” through a custom login screen developed for authentication and authorization.

• Step 2:- A check is made to ensure that the user is valid. The user can be validated from ‘web.config’ files, SQL Server, customer database, windows active directory and various other kinds of data sources.

• Step 3:- If the user is valid then a cookie text file is generated on the client end. This cookie test file signifies that the user has been authenticated. Hence forth when the client computer browses other resources of your ASP.NET site the validation is not conducted again. The cookie file indicates that the user has logged in.

Forms authentication using ‘web.config’ as a data store

So let’s understand step by step how to configure forms authentication. As said in the previous sections you can store user in ‘web.config’ files. Definitely it’s not the best way to store user in “web.config” files but it will really help us to understand forms authentication. Once we understand the same we can then move ahead to better improvised versions of forms authentication.

Step 1:- The first thing we need to do is make an entry in to the web.config file with authentication mode as forms as shown below. We need to also provide the following things :-

• LoginUrl :- This property helps us to provide the start page of authentication and authorization.

• defaultUrl :- Once the user is validated he will be redirected to this value , currently its “Home.aspx”.

• Cookieless :- As said previously forms authentication uses cookies. There are four ways by which you can change this behavior :-

oAutoDetect: – Depending on your browser configuration it can either use cookies or pass the authentication information encrypted via browser URL.

o UseCookies: – You would like the forms authentication mechanism to create cookie when the authentication is successful.

o UseURI :- You would like to pass data encrypted via the browser URL query string.

o UseDeviceProfile :- This is the default value. When you set this value the forms authentication mechanism will do look up at
“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers” to see if the browser support cookies and then decides whether it should use cookies or should not. In other words it does not check on actual runtime if the browser has cookies enabled.

• Credentials: – In the credentials tag we have also some users with name and password. As said previously we will first use forms authentication with username’s stored in web.config files.

<authentication mode="Forms">
<forms loginUrl="Login.aspx" timeout="30" defaultUrl="Home.aspx" 
cookieless="AutoDetect">
<credentials passwordFormat="Clear">
<user name="Shiv" password="pass@123"/>
<user name="Raju" password="pass@123"/>
</credentials>
</forms>
</authentication>

Different customization values for ‘cookieless’ property.

If you set the cookieless as ‘UseDeviceProfile” it will use the browser data from the below file. You can see how Ericsson browser does not support cookies. So if any one connects with ericsson browser and the value is ‘UseDeviceProfile” , forms authentication will pass data through query strings.

Step 2:- Once you have set the “forms” tag values , it’s time to ensure that anonymous users are not able to browse your site. You can set the same by using the authorization tag as shown in the below code snippet.

<authorization>
<deny users="?"/>
</authorization>

Step 3:- We also need to define which user have access to which page. In this project we have created two pages

“Admin.aspx” and “User.aspx”. “Admin.aspx” is accessible to only user “Shiv” while “Admin.aspx” and “User.aspx” is accessible to both the users.

Below web.config settings show how we can set the user to pages.

<location path="Admin.aspx">
<system.web>
<authorization>
<allow users="Shiv"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="User.aspx">
<system.web>
<authorization>
<allow users="Shiv"/>
<allow users="Raju"/>
<deny users="*"/>
</authorization>
</system.web>
</location>

Step 4 :- We now create our custom page which will accept userid and password.

In the button click we provide the below code. The “FormsAuthentication.Authenticate” looks in the web.config the username and passwords. The “FormsAuthentication.RedirectFromLoginPage” creates cookies at the browser end.

If you run your application , enter proper credentials , you should be able to see a cookie txt file created as shown in the below figure.

If you disable cookies using the browser settings, credentials will be passed via query string as shown in the below figure.

Forms Authentication using SQL server as a data store

In order to do custom authentication you need to need to just replace “FormsAuthentication.Authenticate” statement with your validation. For instance in the below code we have used ‘clsUser’ class to do authentication but we have yet used the cookie creation mechanism provided by ‘FormAuthentication’ system.

clsUser objUser = new clsUser();
if (objUser.IsValid(txtUser.Text,txtPass.Text))
{
FormsAuthentication.RedirectFromLoginPage(txtUser.Text, true);
}

Forms authentication using ASP.NET Membership and role

We have used forms authentication mechanism to generate cookie which has minimized lot of our development effort. Many other tasks we are still performing like:-
• Creation of user and roles tables.
• Code level implementation for maintaining those tables.
• User interface for userid and password.

We are sure you must have done the above task for every project again and again. Good news!!! All the above things are now made simple with introduction of membership and roles. To implement ASP.NET membership and roles we need to do the following steps :-

• Run aspnet_regsql.exe from ‘C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727’ folder. Enter SQL Server credentials and run the exe. This will install all the necessary stored procedures and tables as shown in figure ‘Object created by aspnet_regsql.exe’

• Specify the connection string in the ‘web.config’ file where your ASP.NET roles tables and stored procedures are created.

<connectionStrings>
<remove name="LocalSqlServer1"/>
<add name="LocalSqlServer1" connectionString="Data Source=localhost;Initial 
Catalog=test;Integrated Security=True"/> 
</connectionStrings>

• Specify the ASP.NET membership provider and connect the same with the connection string provided in the previous step.

<membership>
<providers>
<remove name="AspNetSqlMembershipProvider"/>
<add name="AspNetSqlMembershipProvider" 
type="System.Web.Security.SqlMembershipProvider, System.Web, 
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
connectionStringName="LocalSqlServer1" enablePasswordRetrieval="false" 
enablePasswordReset="true" applicationName="/" minRequiredPasswordLength="7"/>

</providers>
</membership>

• We also need to specify the role provider and connect the same with the connection string provided in the previous session.

<roleManager enabled="true">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer1" 
applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, 
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>

Now you can use the “Membership” class to create users and roles as shown in the below 2 figures.

You can get a feel how easy it is to use develop authentication and authorization by using forms authentication
and ASP.NET membership and roles.

The dual combination

Authentication and authorization in any application needs 2 things:-
• Mechanism by which you can generate a cookie: – Provided by Forms authentication.

• Custom tables in SQL Server to store user and roles: – Provided by ASP.NET provider and roles.

In other words by using the combination of ticket generation via forms authentication and ASP.NET provider and roles we can come up with a neat and quick solution to implement authentication and authorization in ASP.NET applications.

Forms Authentication using Single Sign on

Many time we would like to implement single sign on across multiple sites. This can be done using forms authentication. You can implement forms authentication in both the websites with same machine key. Once the validation is done in one website a cookie text file will be created. When that user goes to the other website the same cookie file will used to ensure that the user is proper or not.
Please note you need to have same machine key in both the web.config files of your web application.

<machineKey 
validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E340
0267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" 
decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" 
validation="SHA1" />

You can see a very detail article on Single sign at http://msdn.microsoft.com/en-us/library/ms972971.aspx .

You can also download the code from http://download.microsoft.com/download/B/7/8/B78D1CED-2275-4AEE-B0BE-0DEA1A2A9581/MSDNEnterpriseSecurity.msi
The above discusses how a internal intranet and internet application login through one single sign-on facility.

The above diagram is taken from http://msdn.microsoft.com/en-us/library/ms972971.aspx

Passport Authentication

Passport authentication is based on the passport website provided by the Microsoft .So when user logins with credentials it will be reached to the passport website ( i.e. hotmail,devhood,windows live etc) where authentication will happen. If Authentication is successful it will return a token to your website.
I am leaving this section for now, will update in more details soon

Source code

You can download source code for this tutorial from here

References

Single sign on in sub domain SingleSignon.aspx

Great reference on different authentication mechanism

http://msdn.microsoft.com/en-us/library/ee817643.aspx

MSDN article which explains how to do forms authentication http://support.microsoft.com/kb/301240

MSND article which explains identity and principal objects http://msdn.microsoft.com/en-us/library/ftx85f8x(v=VS.85).aspx

Patterns and practices page which provides a table that illustrate range of IIS authentication settings. http://msdn.microsoft.com/en-us/library/ff649264.aspx

Order of precedence for Windows authentication, basic authentication and digest authentication http://support.microsoft.com/kb/264921

Nice article on Forms authentication which goes in depth http://www.4guysfromrolla.com/webtech/110701-1.shtml

Forms authentication explained with nice sequence diagrams http://www.asp.net/security/tutorials/an-overview-of-forms-authentication-vb

Nice PDF of best practices for forms authentication http://www.foundstone.com/us/resources/whitepapers/aspnetformsauthentication.pdf

CÔNG TY TNHH NOVA SỐ – NOVA DIGITAL CO., LTD


LỊCH SỬ HÌNH THÀNH.

Cty TNHH NOVA DIGITAL được thành lập dưới sự tham gia cố vấn và đầu tư từ những chuyên gia công nghệ cao Microsoft, VMware, IBM, EMC với định hướng phát triển trở thành một trong những đơn vị hàng đầu về Sản xuất phần mềm Giải pháp, Tư vấn giải pháp, Dịch vụ Triển khai các Giải pháp phần mềm CNTT trong Quản lý Doanh nghiệp và Điều hành các hệ thống giải pháp Điện toán đám mây.

Đội ngũ nhân sự có năng lực, kinh nghiệm trên 10 năm về triển khai và đào tạo công nghệ, sở hữu nhiều chứng chỉ Quốc tế quan trọng đảm bảo khả năng cạnh tranh trong việc phát triển dịch vụ Đào tạo và triển khai giải pháp CNTT tại Việt Nam và các nước ĐNÁ.

LĨNH VỰC HOẠT ĐỘNG

Công ty TNHH NOVA DIGITAL hoạt động trong lĩnh vực Sản xuất phẩm mềm Quản lý bằng CNTT, Dịch vụ triển khai và Đào tạo CNTT với thế mạnh nhiều năm kinh nghiệm:

  • Phát triển dịch vụ đào tạo chuyên ngành Công nghệ thông tin – Kinh tế và Viễn thông.
  • Đối tác Hợp tác cung cấp các giải pháp CNTT cho 3 Hiệp hội chuyên ngành:
    • Hiệp hội Chế biến và Xuất khẩu Thuỷ sản Việt Nam – VASEP (hơn 500 Doanh nghiệp thành viên trong các lĩnh vực XNK, Chế biến, Sản xuất, Ngân hàng, Thương mại Thuỷ sản).  website: http://www.vasep.com.vn/ 
    • Hiệp hội Gỗ và Lâm sản Việt Nam (hơn 300 Doanh nghiệp thành viên trong các lĩnh vực XNK, chế biến, sản xuất, Ngân hàng, Thương mại Gỗ – nội thất). website:  http://vietfores.org/
    • Hiệp hội Chế biến và xuất khẩu Chè Việt Nam – VITAS ( hơn 80 Doanh nghiệp thành viên trong các lĩnh vực XNK, chế biến, sản xuất, Ngân hàng, Thương mại Chè – ẩm thực Việt Nam).  Website: http://www.vitas.org.vn
  • Các giải pháp phần mềm tin học vào ứng dụng cho doanh nghiệp vừa và nhỏ như:
    • Office 365 Cloud.
    • Cung cấp các phần mềm bản quyền của Microsoft, VMware, Lạc Việt cho Doanh nghiệp Việt Nam.
    • Chứng thư số của Viettel ISP cho khai báo thuế Việt Nam.
    • Hệ thống SMS của Viettel Telecom cho Quản lý sản xuất – Kinh tế.
  • Cung cấp giải phải pháp phần mềm tin học ứng dụng trong trường học Phổ thông và Đại học.
    • Hệ thống SMS của Viettel Telecom cho Quản lý Trường Đại học.
    • Hệ thống SMS Học bạ cho Quản lý Trường Phổ thông.
  • Đối tác triển khai giải pháp duy nhất của Microsoft Live@edu tại Việt Nam.
    • Triển khai hệ thống Exchange Online, SharePoint Online, Forefront Protection for Exchange Online, Skydrive.
    • Tích hợp hệ thống ADSync với Windows Live ID và SSO.
    • Triển khai các giải pháp SSO giữa Moodle hoặc SharePoint On-premise với Outlook Live.
    • Dịch vụ Đào tạo Live@edu for Administrators và Giáo viên các Trường Phổ thông – Đại học.
  • Đối tác duy nhất triển khai nâng cấp Office365 Education của Microsoft tại Việt Nam.
    • Nâng cấp từ Microsoft Live@edu sang Office 365 cho 300 trường PTCS, 128 trường PTTH, 40 Trường CĐ- Trung học chuyên nghiệp, 37 Trường Đại học,  20 Viện và Sau Đại học tại 39 tỉnh thành Việt Nam.
    • Cung cấp phần mềm và triển khai các giải pháp tích hợp, khai thác Office 365 cho toàn bộ các Trường tại Việt Nam.
    • Dịch vụ đào tạo Office 365 gồm 3 môn chuẩn của Microsoft:
      • Course 70-321 Deploying Office 365.
      • Course 70-323 Administering Office 365 for SMB.
      • Course 74-324 End User Office365 training.
  • Đại lý chính thức AER và LAR của Microsoft cung cấp phần mềm giáo dục tại Việt Nam.
  • Đối tác đạo tạo University và Triển khai giải pháp Ảo hoá Chuyên nghiệp của VMware tại Việt Nam.
    • Đại lý sản phẩm phần mềm ảo hoá VMware.
    • Đối tác đào tạo uỷ quyền của VMware tại Việt Nam.
    • Đối tác triển khai Service Solution IT Professional of VMware.
  • Trung tâm thi chứng chỉ Công nghệ Thông tin Quốc tế Prometric, Pearson Vue.
  • Xây dựng trang web điện tử, xây dựng cổng thông tin Doanh nghiệp.

 

CƠ CẤU TỔ CHỨC & NHÂN SỰ

Để thực hiện các chức năng nhiệm vụ phát triển dịch vụ Đào tạo, định hướng kinh doanh, cung cấp các giải pháp ứng dụng CNTT, đảm bảo dịch vụ hỗ trợ khách hàng và duy trì hoạt động của Trung tâm một cách hiệu quả, NOVA Digital đã xây dựng một cơ cấu tổ chức một cách chặt chẽ, hợp lý bao gồm các phòng ban có mối quan hệ hỗ trợ và phối hợp đồng bộ tạo nên một sức mạnh tập thể. Đáp ứng và cung cấp các dịch vụ phục vụ khách hàng Doanh nghiệp một cách toàn diện, chu đáo.

image

CEO: Giám đốc điều hành

CIO: Giám đốc kỹ thuật.

CMO: Giám đốc quản lý đối tác.

CFO: Trưởng quản lý tài chính kế toán.

AM: Quản lý khách hàng.

CCO: Trưởng quản lý chăm sóc khách hàng.

CTO: Trưởng quản lý kỹ thuật và triển khai hỗ trợ kỹ thuật Khách hàng.

 

NỀN TẢNG CÔNG NGHỆ – CHỨNG CHỈ NĂNG LỰC

Chứng chỉ công nghệ Microsoft MCP:

          Chứng chỉ chuyên ngành cao cấp về hệ thống mạng (MCITP)

          Chứng chỉ chuyên gia CNTT về SharePoint 2010 (MCM).

          Chứng chỉ chuyên gia CNTT về Dynamic CRM.

          Chứng chỉ chuyên gia về Đào tạo CNTT của Microsoft (MCT)

Partner Microsoft Live@edu

image

Đối tác duy nhất triển khai Microsoft Live@edu tại Việt Nam.

Microsoft Licensing Sales Specialist LAR & AER

Chứng chỉ cấp phép bán hàng chuyên khối Doanh nghiệp, chính phủ và Giáo dục.

 

Microsoft Office Specialist

Chứng chỉ chuyên ngành về hoạt động nghiệp vụ văn phòng

Microsoft Learning Solution

Ủy quyền của Microsoft về cung cấp các giải pháp cho Giáo dục và Đào tạo

Microsoft SharePoint Platform

          Cung cấp giải pháp Cổng thông tin điện tử và Microsoft Learning Gateway theo nền tảng SharePoint.

          Gia công phần mềm, triển khai dịch vụ hỗ trợ kỹ thuật cho các Trường Quốc tế và Đại học như: Hanoi University of Pharmacy – http://www.hup.edu.vn , UNISHANOI: http://portal.unishanoi.org

Microsoft Dynamic CRM

Giải pháp triển khai hệ thống Chăm sóc khách hàng

Microsoft Business Intelligence

          Giải pháp Doanh nghiệp thông minh chuyên cung cấp giải pháp BI 2008, BI 2012 trên nền Windows Server 2008 R2, Windows Server 2012 cho Hải Quan Việt Nam và Hiệp hội CBXN TS VASEP, Hiệp hội Chè VITAS.

Đối tác của SourceCode

image

Chuyên triển khai giải pháp “Business Process Management Solution” cho Doanh nghiệp Viễn thông Viettel Telecom tại 64 tỉnh thành.

Khảo thí thi chứng chỉ Quốc tế

image

          Chuyên tổ chức thi chứng chỉ CNTT của Microsoft, IBM, WMware.


SẢN PHẨM, GIẢI PHÁP & DỊCH VỤ

1.      Chương trình Microsoft Partner Program

          Đối tác của Microsoft phát triển mạng lưới và đánh giá, xác thực năng lực đối tác tại Việt Nam.

          Phát triển các gói sản phẩm, giải pháp cho các doanh nghiệp, đối tác.

          Đại lý chính thức cung cấp các phần mềm có bản quyền tại Việt Nam.

2.      Chương trình Microsoft LAR & AER (Microsoft Authorized Education Resller)

Tư vấn, cung cấp và đào tạo khai thác các phần mềm có bản quyền của Microsoft cho các đơn vị là Trường Đại học, Cao đẳng, THPT…

3.      Chương trình Live@edu và Office365 Cloud

Đối tác độc quyền triển khai cung cấp gói dịch vụ Microsoft Cloud miễn phí cho khối Giáo dục tại Việt Nam, Lào, Campuchia bao gồm:

          Hệ thống Email trực tuyến.

          Hệ thống cổng thông tin giáo dục trực tuyến.

          Hệ thống hội thảo trực tuyến.

          Hệ thống Microsoft Office trực tuyến.

          Hệ thống Dynamic CRM trực tuyến.

          Dịch vụ hỗ trợ, tư vấn và triển khai kỹ thuật Microsoft Cloud.

4.      Giải pháp phần mềm dựa trên nền tảng hạ tầng SharePoint và .Net Framework

          Cung cấp giải pháp cổng thông tin quản lý nội dung giáo trình, giáo án, trắc nghiệm cho khối giáo dục.

          Cung cấp giải pháp cổng thông tin quản lý nội dung giáo trình, giáo án, trắc nghiệm cho khối doanh nghiệp quản trị nhân sự.

5.      Giải pháp dịch vụ gia tăng trên di động (SMS Mobile)

Cung cấp giải pháp quản lý học sinh, sinh viên và phản hồi thông tin qua tổng đài nhắn tin thuê bao điện thoại di động.

6.      Phòng thi chứng chỉ Quốc tế được khảo thí ủy quyền của Prometric và Pearson Vue

Phòng thi đạt tiêu chuẩn Quốc tế được Prometric ủy quyền cho phép học viên thi và nhận các chứng chỉ chuyên ngành CNTT đạt chuẩn Quốc tế tại Việt Nam.

7.      Giải pháp ảo hóa hệ thống VMware

Đối tác độc quyền của VMware tại Việt Nam

          Tư vấn giải pháp.

          Triển khai hạ tầng.

          Đào tạo và chuyển giao công nghệ.

8.      Giải pháp phát triển dịch vụ trực tuyến trên nền Microsoft Cloud computing

Đối tác duy nhất tại Việt nam tư vấn, triển khai, đào tạo và chuyển giao công nghệ về các giải pháp trên nền Microsoft Cloud Apps.

KHÁCH HÀNG TIÊU BIỂU

Các thành viên xây dựng NOVA DIGITAL đều là những người có từ 10 – 16 năm kinh nghiệm triển khai trong các lĩnh vực:

1.      Dầu khí: PVOL

2.      Ngân hàng: Vietin Bank, VP Bank

3.      Bảo hiểm: Prudential, Manulife

4.      Vinamilk

5.      Đào tạo: RMIT University, de Heus, HUP, HUBT, HCMUT, NEU, HLU, Nhất Nghệ, DNU, HUESTAR.

6.      Hải Quan: Hải Quan Việt nam, FAO – FIIU – WCOO.

7.      Viễn Thông: Viettel Telecom.

8.      Truyền hình: VTC, Viettel Media, Mobiphone Media, PGM Senvang, HTC

 

CÁC DỰ ÁN TIÊU BIỂU ĐÃ THỰC HIỆN

Khách hàng Doanh nghiệp

Thời gian

Sản phẩm và dịch vụ cung cấp

Viettel Telecom

(64 tỉnh thành, 6000 người dùng).

2007

Giải pháp Quản lý Quy trình về Hợp đồng Mua Bán

của  K2Workflow SourceCode trên nền SharePoint Office 2007 Server

Microsoft

2008

Mô hình giải pháp SMS Mobile ứng dụng cho Nông thôn

VASEP

2011

Cổng thông tin chuyên ngành Thủy sản

http://www.vasep.com.vn

VITAS

2010

Công thông tin nội bộ Hiệp hội Chè

http://portal.vitas.org.vn

Microsoft for Education

Từ 2008 đến nay

Chương trình Live@edu triển khai tại Việt Nam cho:

– 300 trường PTCS

– 128 trường PTTH

– 40 Trường CĐ- Trung học chuyên nghiệp

– 37 Trường Đại học

– 20 Viện và Sau Đại học tại 39 tỉnh thành Việt Nam.

– 15 Trường Quốc tế.

VISC

2012

Trang học bạ trực tuyến Hocba.vn

http://hocba.vn

Viettel CA

2010

Cung cấp chữ ký số cho các ngành Thuế, Hải quan điện tử và các Doanh nghiệp thuê Hosting máy chủ.

NAT&L

2009

Tư vấn và triển khai giải pháp Mobile SMS Gateway của Microsoft UPG tại nhà máy mía đường Nghệ An.

Bộ Nông nghiệp (MART)

2009

Triển khai giải pháp thống kê giá nông nghiệp qua Mobile (Microsoft Project MIDAS)

Khách hàng GIÁO DỤC

Thời gian

Sản phẩm và dịch vụ cung cấp

Đại học Dược HN (Hanoi University of Pharmacy)

11.000 người dùng

2010

Triển khai giải pháp hạ tầng Web hosting, Sharepoint portal, Learning Geatway, hội thảo trực tuyến bằng Microsoft Lync Online.

Website: http://www.hup.edu.vn

Kiểu dự án: Lai ghép điện toán đám mây

Đại học Văn Lang

25.000 người dùng

2009

Triển khai dịch vụ hạ tầng Outlook Live, Moodle tích hợp Windows Live ID.

Website: http://www.vanlanguni.edu.vn/

Kiểu dự án: Lai ghép điện toán đám mây

Đại học Bách Khoa TP.HCM

35.000 người dùng

2009

Triển khai dịch vụ hạ tầng Outlook Live, PSA tích hợp Windows Live ID.

Website: http://www.hcmut.edu.vn/en

Kiểu dự án: Cloud and On-Premise

Đại học Tôn Đức Thắng

45.000 người dùng

2010

Triển khai dịch vụ hạ tầng Outlook Live, PowerShell đồng bộ dữ liệu người dùng.

Website: http://english.tdt.edu.vn/ 

Kiểu dự án: Lai ghép điện toán đám mây

Đại học Đà nẵng

32.000 người dùng

2009

Triển khai dịch vụ hạ tầng Outlook Live, PowerShell đồng bộ dữ liệu người dùng.

Triển khai Cổng thông tin Moodle Learning với Windows Live ID.

Website: http://www.dnu.edu.vn

Kiểu dự án: Lai ghép điện toán đám mây

Đại Học Dân lập Thăng Long

9000 người dùng

2008

Triển khai dịch vụ hạ tầng Outlook Live, PowerShell đồng bộ dữ liệu người dùng.

Triển khai Cổng thông tin Joomla với Windows Live ID.

Website: http://thanglong.edu.vn/

Kiểu dự án: Lai ghép điện toán đám mây

Đại học Đông Đô

5000 người dùng

2009

Triển khai dịch vụ hạ tầng Outlook Live, PowerShell đồng bộ dữ liệu người dùng.

Triển khai Cổng thông tin ASP.Net với Windows Live ID.

Website: http://www.dongdo.edu.vn

Kiểu dự án: Lai ghép điện toán đám mây

Đại học Quản trị Kinh Doanh Công nghệ HUBT

25.000 người dùng

2010

Triển khai dịch vụ hạ tầng Outlook Live, PowerShell đồng bộ dữ liệu người dùng.

Triển khai Cổng thông tin Moodle Learning với Windows Live ID.

Website: http://www.hubt.edu.vn

Kiểu dự án: Lai ghép điện toán đám mây

Khách hàng GIÁO DỤC QUỐC TẾ

Thời gian

Sản phẩm và dịch vụ cung cấp

Australian International School – Vietnam

 

1000 người dùng

2012 đến nay

Triển khai dịch vụ hạ tầng Outlook Live, PowerShell đồng bộ dữ liệu người dùng.

Triển khai Cổng thông tin SharePoint 2010 với Windows Live ID và SSO.

Website: http://www.aisvietnam.com

Kiểu dự án: Lai ghép điện toán đám mây

Kinder World Group

2000 người dùng

2010

Triển khai dịch vụ hạ tầng Outlook Live, PowerShell đồng bộ dữ liệu người dùng.

Triển khai Cổng thông tin Joomla với Windows Live ID và SSO.

Website: http://kinderworld.net/

Kiểu dự án: Lai ghép điện toán đám mây

the International School Ho Chi Minh City (ISHCMC)

3000 người dùng

2011

Triển khai dịch vụ hạ tầng Outlook Live, PowerShell đồng bộ dữ liệu người dùng.

Triển khai Cổng thông tin Joomla với Windows Live ID và SSO.

http://www.ishcmc.com/

UnisHanoi

1000 người dùng

2012 đến nay

Tư vấn giải pháp SharePoint, Exchange và triển khai Hạ dịch vụ quản lý hệ thống trọn gói

http://portal.unishanoi.org

 

ĐỐI TÁC CHIẾN LƯỢC CỦA NOVA DIGITAL

Doanh nghiệp mạnh về cung cấp giải pháp, thiết bị, dịch vụ  và phần mềm CNTT

image

Microsoft Small Business Specialist

Đối tác triển khai dịch vụ Office 365 cho Trường CĐ, ĐH và Doanh nghiệp

Đối tác chuyên triển khai và đào tạo các giải pháp Cổng thông tin SharePoint, BizTalk, SQL, Lync và Office Online.

image

Solution Service IT Professional

Đối tác chuyên triển khai giải pháp Ảo hoá vCenter & vCloud mạng Doanh nghiệp cho các Trường CĐ, ĐH và Doanh nghiệp.

image

Solution Service NAS Professional

Đối tác chuyên triển khai giải pháp Lưu trữ mạng nội bộ và Điện toán đám mây NAS to LAN & vCloud cho các Trường CĐ, ĐH và Doanh nghiệp.

image

 Service Provider SERVER & SAN Professional

Đối tác chuyên triển khai giải pháp Máy chủ Server & SAN cho các Trường CĐ, ĐH và Doanh nghiệp.

 

image

          Đối tác tư vấn và triển khai hệ thống phần mềm giải pháp dịch vụ khai báo Hải quan “E-Manifest Vietnam Customs”.

          Đối tác tư vấn và triển khai hệ thống Quản lý Nội dung số Truyền hình Viễn thông Viettel Media.

image

          Đối tác tư vấn và triển khai sản phẩm phần mềm Quản lý tài chính Khách hàng Doanh nghiệp ERP.

image

          Đối tác tư vấn và triển khai hệ thống Quản lý Nội dung số Truyền hình Tin tức VTC Media.

          Đối tác tư vấn và triển khai hạ tầng ảo hoá trong Đào tạo CNTT VTC Labs Management.

image

          Đối tác tư vấn và triển khai hệ thống Quản lý dịch vụ Ảo hoá Điện toán đám mây vCloud CMC IDC HCMC.

 

Doanh nghiệp tiên phong trong lĩnh vực Đào tạo CNTT

image

image

1.      Viện Đào tạo Công nghệ và Quản trị Robusta

2.      IPMAC.

3.      IT Academic Thang Long.

4.      NetPro IT Academic.

5.      Trung tâm CNTT Đại học Kinh doanh và Công nghệ Hà nội.

6.      Viện đào tạo CNTT & Viễn thông – Đại Học Mở Hà Nội.

7.      Viện Đào tạo Công nghệ sau đại học – Đại Học Bách Khoa Hà nội.

8.      Học viện CNTT – Kinh tế Quốc Dân.

9.      Trường Cao đẳng Công nghiệp Huế.

10.  Nhất Nghệ.

 

Đối tác Hiệp hội Doanh nghiệp Thông tấn

image

          14 năm Đối tác tư vấn và triển khai hỗ trợ nâng cao năng lực CNTT tại Hiệp hội Doanh nghiệp thủy sản Việt Nam (VASEP)

image

          4 năm Đối tác tư vấn và triển khai xây dựng, đào tạo năng lực quản lý nghiệp vụ văn phòng tại Hiệp hội Chè Việt Nam (VITAS)

 

image

          14 năm làm Đối tác tư vấn và hỗ trợ kỹ thuật  CNTT tại Doanh nghiệp sản xuất và chế biến đồ Gỗ nội thất trực thuộc Hội Gỗ Việt Nam

ĐỊNH HƯỚNG PHÁT TRIỂN TRONG TƯƠNG LAI

Chúng tôi cam kết

          Chất lượng dịch vụ là kim chỉ nam cho mọi hoạt động của chúng tôi do đó chúng tôi luôn tập trung để thỏa mãn yêu cầu của khách hàng với tinh thần phục vụ tận tụy và sự hiểu biết sâu sắc về nhu cầu đề ra.

          Cùng với đó chúng tôi không ngừng nâng cao năng lực công nghệ và cải tiến quy trình chất lượng nhằm cung cấp những sản phẩm và dịch vụ có chất lượng tốt nhất.

          Chân thành, chủ động trong việc xây dựng quan hệ đối tác để cùng phát triển.

          Đoàn kết nội bộ, nỗ lực phấn đấu vì một sự nghiệp Giáo dục tiến bộ.

          Tái đầu tư xã hội thông qua các hoạt động Giáo dục cộng đồng.

Chiến lược phát triển

          Chúng tôi không ngừng đầu tư để đảm bảo luôn đi trước và đón đầu công nghệ tiên tiến dựa trên những đối tác chiến lược lâu năm.

          Không ngừng mở rộng quan hệ đối tác tạo cơ hội phát triển lớn mạnh.

          Xây dựng mạng lưới khách hàng sâu rộng và bền vững.

          Đẩy mạnh công tác đào tạo, chuyển giao công nghệ với các hãng đối tác.

          Xây dựng chiến lược nhân sự ổn định dựa trên triết lý nhân bản sâu sắc.

          Hướng tới mục tiêu trở một trong những đơn vị tiên phong về cung cấp dịch vụ đào tạo và giải pháp công nghệ tại khu vực Châu Á Thái Bình Dương.

 

Học lập trình căn bản: ASP.NET – Web Services


A web service is a web-based functionality accessed using the protocols of the web to be used by the web applications. There are three aspects of web service development:

  • Creating the web service
  • Creating a proxy
  • Consuming the web service

Creating a Web Service

A web service is a web application which is basically a class consisting of methods that could be used by other applications. It also follows a code-behind architecture such as the ASP.NET web pages, although it does not have a user interface.

To understand the concept let us create a web service to provide stock price information. The clients can query about the name and price of a stock based on the stock symbol. To keep this example simple, the values are hardcoded in a two-dimensional array. This web service has three methods:

  • A default HelloWorld method
  • A GetName Method
  • A GetPrice Method

Take the following steps to create the web service:

Step (1) : Select File -> New -> Web Site in Visual Studio, and then select ASP.NET Web Service.

Step (2) : A web service file called Service.asmx and its code behind file, Service.cs is created in the App_Code directory of the project.

Step (3) : Change the names of the files to StockService.asmx and StockService.cs.

Step (4) : The .asmx file has simply a WebService directive on it:

<%@ WebService Language="C#" CodeBehind="~/App_Code/StockService.cs" Class="StockService" %>

Step (5) : Open the StockService.cs file, the code generated in it is the basic Hello World service. The default web service code behind file looks like the following:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;

using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

using System.Xml.Linq;

namespace StockService
{
   // <summary>
   // Summary description for Service1
   // <summary>
   
   [WebService(Namespace = "http://tempuri.org/")]
   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
   [ToolboxItem(false)]
   
   // To allow this Web Service to be called from script, 
   // using ASP.NET AJAX, uncomment the following line. 
   // [System.Web.Script.Services.ScriptService]
   
   public class Service1 : System.Web.Services.WebService
   {
      [WebMethod]
      
      public string HelloWorld()
      {
         return "Hello World";
      }
   }
}

Step (6) : Change the code behind file to add the two dimensional array of strings for stock symbol, name and price and two web methods for getting the stock information.

using System;
using System.Linq;

using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

using System.Xml.Linq;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

// To allow this Web Service to be called from script, 
// using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]

public class StockService : System.Web.Services.WebService
{
   public StockService () {
      //Uncomment the following if using designed components 
      //InitializeComponent(); 
   }
   
   string[,] stocks =
   {
      {"RELIND", "Reliance Industries", "1060.15"},
      {"ICICI", "ICICI Bank", "911.55"},
      {"JSW", "JSW Steel", "1201.25"},
      {"WIPRO", "Wipro Limited", "1194.65"},
      {"SATYAM", "Satyam Computers", "91.10"}
   };

   [WebMethod]
   public string HelloWorld() {
      return "Hello World";
   }
   
   [WebMethod]
   public double GetPrice(string symbol)
   { 
      //it takes the symbol as parameter and returns price
      for (int i = 0; i < stocks.GetLength(0); i++)
      {
         if (String.Compare(symbol, stocks[i, 0], true) == 0)
         return Convert.ToDouble(stocks[i, 2]);
      }
      
      return 0;
   }
   
   [WebMethod]
   public string GetName(string symbol)
   {
      // It takes the symbol as parameter and 
      // returns name of the stock
      for (int i = 0; i < stocks.GetLength(0); i++)
      {
         if (String.Compare(symbol, stocks[i, 0], true) == 0)
         return stocks[i, 1];
      }
      
      return "Stock Not Found";
   }
}

Step (7) : Running the web service application gives a web service test page, which allows testing the service methods.

Stock Service

Step (8) : Click on a method name, and check whether it runs properly.

Get Name

Step (9) : For testing the GetName method, provide one of the stock symbols, which are hard coded, it returns the name of the stock

the name of the stock

Consuming the Web Service

For using the web service, create a web site under the same solution. This could be done by right clicking on the Solution name in the Solution Explorer. The web page calling the web service should have a label control to display the returned results and two button controls one for post back and another for calling the service.

The content file for the web application is as follows:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wsclient._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

   <head runat="server">
      <title>
         Untitled Page
      </title>
   </head>
   
   <body>
   
      <form id="form1" runat="server">
         

Using the Stock Service





    
</form> </body> </html>

The code behind file for the web application is as follows:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;

using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

//this is the proxy
using localhost;

namespace wsclient
{
   public partial class _Default : System.Web.UI.Page
   {
      protected void Page_Load(object sender, EventArgs e)
      {
         if (!IsPostBack)
         {
            lblmessage.Text = "First Loading Time: " +  DateTime.Now.ToLongTimeString
         }
         else
         {
            lblmessage.Text = "PostBack at: " + DateTime.Now.ToLongTimeString();
         }
      }
      
      protected void btnservice_Click(object sender, EventArgs e)
      {
         StockService proxy = new StockService();
         lblmessage.Text = String.Format("Current SATYAM Price:{0}",
         proxy.GetPrice("SATYAM").ToString());
      }
   }
}

Creating the Proxy

A proxy is a stand-in for the web service codes. Before using the web service, a proxy must be created. The proxy is registered with the client application. Then the client application makes the calls to the web service as it were using a local method.

The proxy takes the calls, wraps it in proper format and sends it as a SOAP request to the server. SOAP stands for Simple Object Access Protocol. This protocol is used for exchanging web service data.

When the server returns the SOAP package to the client, the proxy decodes everything and presents it to the client application.

Before calling the web service using the btnservice_Click, a web reference should be added to the application. This creates a proxy class transparently, which is used by the btnservice_Click event.

protected void btnservice_Click(object sender, EventArgs e)
{
   StockService proxy = new StockService();
   lblmessage.Text = String.Format("Current SATYAM Price: {0}", 
   proxy.GetPrice("SATYAM").ToString());
}

Take the following steps for creating the proxy:

Step (1) : Right click on the web application entry in the Solution Explorer and click on ‘Add Web Reference’.

Add Web Reference

Step (2) : Select ‘Web Services in this solution’. It returns the StockService reference.

Select Web Services

Step (3) : Clicking on the service opens the test web page. By default the proxy created is called ‘localhost’, you can rename it. Click on ‘Add Reference’ to add the proxy to the client application.

Stock Service 2

Include the proxy in the code behind file by adding:

 using localhost;

A thread is defined as the execution path of a program. Each thread defines a unique flow of control. If your application involves complicated and time consuming operations such as database access or some intense I/O operations, then it is often helpful to set different execution paths or threads, with each thread performing a particular job.

Threads are lightweight processes. One common example of use of thread is implementation of concurrent programming by modern operating systems. Use of threads saves wastage of CPU cycle and increases efficiency of an application.

So far we compiled programs where a single thread runs as a single process which is the running instance of the application. However, this way the application can perform one job at a time. To make it execute multiple tasks at a time, it could be divided into smaller threads.

In .Net, the threading is handled through the ‘System.Threading’ namespace. Creating a variable of the System.Threading.Thread type allows you to create a new thread to start working with. It allows you to create and access individual threads in a program.

Creating Thread

A thread is created by creating a Thread object, giving its constructor a ThreadStart reference.

ThreadStart childthreat = new ThreadStart(childthreadcall);

Thread Life Cycle

The life cycle of a thread starts when an object of the System.Threading.Thread class is created and ends when the thread is terminated or completes execution.

Following are the various states in the life cycle of a thread:

  • The Unstarted State : It is the situation when the instance of the thread is created but the Start method is not called.

  • The Ready State : It is the situation when the thread is ready to execute and waiting CPU cycle.

  • The Not Runnable State : a thread is not runnable, when:

    • Sleep method has been called
    • Wait method has been called
    • Blocked by I/O operations
  • The Dead State : It is the situation when the thread has completed execution or has been aborted.

Thread Priority

The Priority property of the Thread class specifies the priority of one thread with respect to other. The .Net runtime selects the ready thread with the highest priority.

The priorities could be categorized as:

  • Above normal
  • Below normal
  • Highest
  • Lowest
  • Normal

Once a thread is created, its priority is set using the Priority property of the thread class.

NewThread.Priority = ThreadPriority.Highest;

Thread Properties & Methods

The Thread class has the following important properties:

Property
Description

CurrentContext
Gets the current context in which the thread is executing.

CurrentCulture
Gets or sets the culture for the current thread.

CurrentPrinciple
Gets or sets the thread’s current principal for role-based security.

CurrentThread
Gets the currently running thread.

CurrentUICulture
Gets or sets the current culture used by the Resource Manager to look up culture-specific resources at run time.

ExecutionContext
Gets an ExecutionContext object that contains information about the various contexts of the current thread.

IsAlive
Gets a value indicating the execution status of the current thread.

IsBackground
Gets or sets a value indicating whether or not a thread is a background thread.

IsThreadPoolThread
Gets a value indicating whether or not a thread belongs to the managed thread pool.

ManagedThreadId
Gets a unique identifier for the current managed thread.

Name
Gets or sets the name of the thread.

Priority
Gets or sets a value indicating the scheduling priority of a thread.

ThreadState
Gets a value containing the states of the current thread.

The Thread class has the following important methods:

Methods
Description

Abort
Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Calling this method usually terminates the thread.

AllocateDataSlot
Allocates an unnamed data slot on all the threads. For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

AllocateNamedDataSlot
Allocates a named data slot on all threads. For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

BeginCriticalRegion
Notifies a host that execution is about to enter a region of code in which the effects of a thread abort or unhandled exception might endanger other tasks in the application domain.

BeginThreadAffinity
Notifies a host that managed code is about to execute instructions that depend on the identity of the current physical operating system thread.

EndCriticalRegion
Notifies a host that execution is about to enter a region of code in which the effects of a thread abort or unhandled exception are limited to the current task.

EndThreadAffinity
Notifies a host that managed code has finished executing instructions that depend on the identity of the current physical operating system thread.

FreeNamedDataSlot
Eliminates the association between a name and a slot, for all threads in the process. For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

GetData
Retrieves the value from the specified slot on the current thread, within the current thread’s current domain. For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

GetDomain
Returns the current domain in which the current thread is running.

GetDomainID
Returns a unique application domain identifier.

GetNamedDataSlot
Looks up a named data slot. For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

Interrupt
Interrupts a thread that is in the WaitSleepJoin thread state.

Join
Blocks the calling thread until a thread terminates, while continuing to perform standard COM and SendMessage pumping. This method has different overloaded forms.

MemoryBarrier
Synchronizes memory access as follows: The processor executing the current thread cannot reorder instructions in such a way that memory accesses prior to the call to MemoryBarrier execute after memory accesses that follow the call to MemoryBarrier.

ResetAbort
Cancels an Abort requested for the current thread.

SetData
Sets the data in the specified slot on the currently running thread, for that thread’s current domain. For better performance, use fields marked with the ThreadStaticAttribute attribute instead.

Start
Starts a thread.

Sleep
Makes the thread pause for a period of time.

SpinWait
Causes a thread to wait the number of times defined by the iterations parameter.

VolatileRead()
Reads the value of a field. The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache. This method has different overloaded forms.

VolatileWrite()
Writes a value to a field immediately, so that the value is visible to all processors in the computer. This method has different overloaded forms.

Yield
Causes the calling thread to yield execution to another thread that is ready to run on the current processor. The operating system selects the thread to yield to.

Example

The following example illustrates the uses of the Thread class. The page has a label control for displaying messages from the child thread. The messages from the main program are directly displayed using the Response.Write() method. Hence they appear on the top of the page.

The source file is as follows:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="threaddemo._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

   <head runat="server">
      <title>
         Untitled Page
      </title>
   </head>
   
   <body>
      <form id="form1" runat="server">
         

Thread Example

<asp:Label ID="lblmessage" runat="server" Text="Label"> </asp:Label> </form> </body> </html>

The code behind file is as follows:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;

using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;
using System.Threading;

namespace threaddemo
{
   public partial class _Default : System.Web.UI.Page
   {
      protected void Page_Load(object sender, EventArgs e)
      {
         ThreadStart childthreat = new ThreadStart(childthreadcall);
         Response.Write("Child Thread Started <br/>");
         Thread child = new Thread(childthreat);
         
         child.Start();
         
         Response.Write("Main sleeping  for 2 seconds.......<br/>");
         Thread.Sleep(2000);
         Response.Write("<br/>Main aborting child thread<br/>");
         
         child.Abort();
      }
      
      public void childthreadcall()
      {
         try{
            lblmessage.Text = "<br />Child thread started <br/>";
            lblmessage.Text += "Child Thread: Coiunting to 10";
            
            for( int i =0; i<10; i++)
            {
               Thread.Sleep(500);
               lblmessage.Text += "<br/> in Child thread </br>";
            }
            
            lblmessage.Text += "<br/> child thread finished";
            
         }catch(ThreadAbortException e){
         
            lblmessage.Text += "<br /> child thread - exception";
            
         }finally{
            lblmessage.Text += "<br /> child thread - unable to catch the  exception";
         }
      }
   }
}

Observe the following

  • When the page is loaded, a new thread is started with the reference of the method childthreadcall(). The main thread activities are displayed directly on the web page.

  • The second thread runs and sends messages to the label control.

  • The main thread sleeps for 2000 ms, during which the child thread executes.

  • The child thread runs till it is aborted by the main thread. It raises the ThreadAbortException and is terminated.

  • Control returns to the main thread.

When executed the program sends the following messages:

ASP.NET Thread

The behavior of an ASP.NET application is affected by different settings in the configuration files:

  • machine.config
  • web.config

The machine.config file contains default and the machine-specific value for all supported settings. The machine settings are controlled by the system administrator and applications are generally not given access to this file.

An application however, can override the default values by creating web.config files in its roots folder. The web.config file is a subset of the machine.config file.

If the application contains child directories, it can define a web.config file for each folder. Scope of each configuration file is determined in a hierarchical top-down manner.

Any web.config file can locally extend, restrict, or override any settings defined on the upper level.

Visual Studio generates a default web.config file for each project. An application can execute without a web.config file, however, you cannot debug an application without a web.config file.

The following figure shows the Solution Explorer for the sample example used in the web services tutorial:

Solution Explorer-2

In this application, there are two web.config files for two projects i.e., the web service and the web site calling the web service.

The web.config file has the configuration element as the root node. Information inside this element is grouped into two main areas: the configuration section-handler declaration area, and the configuration section settings area.

The following code snippet shows the basic syntax of a configuration file:

<configuration>

   <!-- Configuration section-handler declaration area. -->
      <configSections>
         <section name="section1" type="section1Handler" />
         <section name="section2" type="section2Handler" />
      </configSections>
   <!-- Configuration section settings area. -->
   
   <section1>
      <s1Setting1 attribute1="attr1" />
   </section1>
   
   <section2>
      <s2Setting1 attribute1="attr1" />
   </section2>
   
   <system.web>
      <authentication mode="Windows" />
   </system.web>
   
</configuration>

Configuration Section Handler declarations

The configuration section handlers are contained within the <configSections> tags. Each configuration handler specifies name of a configuration section, contained within the file, which provides some configuration data. It has the following basic syntax:

<configSections>
   <section />
   <sectionGroup />
   <remove />
   <clear/>
</configSections>

It has the following elements:

  • Clear – It removes all references to inherited sections and section groups.

  • Remove – It removes a reference to an inherited section and section group.

  • Section – It defines an association between a configuration section handler and a configuration element.

  • Section group – It defines an association between a configuration section handler and a configuration section.

Application Settings

The application settings allow storing application-wide name-value pairs for read-only access. For example, you can define a custom application setting as:

<configuration>
   <appSettings>
      <add key="Application Name" value="MyApplication" /> 
   </appSettings>
</configuration>

For example, you can also store the name of a book and its ISBN number:

<configuration>
   <appSettings>
      <add key="appISBN" value="0-273-68726-3" />
      <add key="appBook" value="Corporate Finance" />
   </appSettings>
</configuration>

Connection Strings

The connection strings show which database connection strings are available to the website. For example:

<connectionStrings>
   <add name="ASPDotNetStepByStepConnectionString" 
      connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
      Data Source=E:\\projects\datacaching\ /
      datacaching\App_Data\ASPDotNetStepByStep.mdb"
      providerName="System.Data.OleDb" />
      
   <add name="booksConnectionString" 
      connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
      Data Source=C:\ \databinding\App_Data\books.mdb"
      providerName="System.Data.OleDb" />
</connectionStrings>

System.Web Element

The system.web element specifies the root element for the ASP.NET configuration section and contains configuration elements that configure ASP.NET Web applications and control how the applications behave.

It holds most of the configuration elements needed to be adjusted in common applications. The basic syntax for the element is as given:

<system.web> 
   <anonymousIdentification> 
   <authentication> 
   <authorization> 
   <browserCaps> 
   <caching> 
   <clientTarget> 
   <compilation> 
   <customErrors> 
   <deployment> 
   <deviceFilters> 
   <globalization> 
   <healthMonitoring> 
   <hostingEnvironment> 
   <httpCookies> 
   <httpHandlers> 
   <httpModules> 
   <httpRuntime> 
   <identity> 
   <machineKey> 
   <membership> 
   <mobileControls> 
   <pages> 
   <processModel> 
   <profile> 
   <roleManager> 
   <securityPolicy> 
   <sessionPageState> 
   <sessionState> 
   <siteMap> 
   <trace> 
   <trust> 
   <urlMappings> 
   <webControls> 
   <webParts> 
   <webServices> 
   <xhtmlConformance> 
</system.web>

The following table provides brief description of some of common sub elements of the system.web element:

AnonymousIdentification

This is required to identify users who are not authenticated when authorization is required.

Authentication

It configures the authentication support. The basic syntax is as given:

<authentication mode="[Windows|Forms|Passport|None]"> 
   <forms>...</forms>
   <passport/>
</authentication>
Authorization

It configures the authorization support. The basic syntax is as given:

<authorization> 
   <allow .../>
   <deny .../>
</authorization>
Caching

It Configures the cache settings. The basic syntax is as given:

<caching>
   <cache>...</cache>
   <outputCache>...</outputCache>
   <outputCacheSettings>...</outputCacheSettings>
   <sqlCacheDependency>...</sqlCacheDependency>
</caching>
CustomErrors

It defines custom error messages. The basic syntax is as given:

<customErrors defaultRedirect="url" mode="On|Off|RemoteOnly">
   <error. . ./>
</customErrors>
Deployment

It defines configuration settings used for deployment. The basic syntax is as follows:

<deployment retail="true|false" />
HostingEnvironment

It defines configuration settings for hosting environment. The basic syntax is as follows:

<hostingEnvironment idleTimeout="HH:MM:SS" shadowCopyBinAssemblies="true|false" 
   shutdownTimeout="number" urlMetadataSlidingExpiration="HH:MM:SS" />
Identity

It configures the identity of the application. The basic syntax is as given:

<identity impersonate="true|false" userName="domain\username"
   password="<secure password>"/>
MachineKey

It configures keys to use for encryption and decryption of Forms authentication cookie data.

It also allows configuring a validation key that performs message authentication checks on view-state data and forms authentication tickets. The basic syntax is:

<machineKey validationKey="AutoGenerate,IsolateApps" [String]
   decryptionKey="AutoGenerate,IsolateApps" [String]
   validation="HMACSHA256" [SHA1 | MD5 | 3DES | AES | HMACSHA256 | 
   HMACSHA384 | HMACSHA512 | alg:algorithm_name]
   decryption="Auto" [Auto | DES | 3DES | AES | alg:algorithm_name]
/>
Membership

This configures parameters of managing and authenticating user accounts. The basic syntax is:

<membership defaultProvider="provider name"
   userIsOnlineTimeWindow="number of minutes" hashAlgorithmType="SHA1">
   <providers>...</providers>
</membership>
Pages

It provides page-specific configurations. The basic syntax is:

<pages asyncTimeout="number" autoEventWireup="[True|False]"
      buffer="[True|False]" clientIDMode="[AutoID|Predictable|Static]"
      compilationMode="[Always|Auto|Never]" 
      controlRenderingCompatibilityVersion="[3.5|4.0]"
      enableEventValidation="[True|False]"
      enableSessionState="[True|False|ReadOnly]"
      enableViewState="[True|False]"
      enableViewStateMac="[True|False]"
      maintainScrollPositionOnPostBack="[True|False]" 
      masterPageFile="file path" 
      maxPageStateFieldLength="number" 
      pageBaseType="typename, assembly"
      pageParserFilterType="string" 
      smartNavigation="[True|False]"
      styleSheetTheme="string"
      theme="string"
      userControlBaseType="typename"
      validateRequest="[True|False]"
      viewStateEncryptionMode="[Always|Auto|Never]" >
   
   <controls>...</controls>
   <namespaces>...</namespaces>
   <tagMapping>...</tagMapping>
   <ignoreDeviceFilters>...</ignoreDeviceFilters>
</pages>
Profile

It configures user profile parameters. The basic syntax is:

<profile enabled="true|false" inherits="fully qualified type reference"
   automaticSaveEnabled="true|false" defaultProvider="provider name">
   
   <properties>...</properties>
   <providers>...</providers>
   
</profile>
RoleManager

It configures settings for user roles. The basic syntax is:

<roleManager cacheRolesInCookie="true|false" cookieName="name"
   cookiePath="/" cookieProtection="All|Encryption|Validation|None"
   cookieRequireSSL="true|false " cookieSlidingExpiration="true|false "
   cookieTimeout="number of minutes" createPersistentCookie="true|false"
   defaultProvider="provider name" domain="cookie domain"> 
   enabled="true|false"
   maxCachedResults="maximum number of role names cached"
   
   <providers>...</providers>
</roleManager>
SecurityPolicy

It configures the security policy. The basic syntax is:

<securityPolicy>
   <trustLevel />
</securityPolicy>
UrlMappings

It defines mappings to hide the original URL and provide a more user friendly URL. The basic syntax is:

<urlMappings enabled="true|false">
   <add.../>
   <clear />
   <remove.../>
</urlMappings>
WebControls

It provides the name of shared location for client scripts. The basic syntax is:

<webControls clientScriptsLocation="String" />
WebServices

This configures the web services.

There are two categories of ASP.NET deployment:

  • Local deployment : In this case, the entire application is contained within a virtual directory and all the contents and assemblies are contained within it and available to the application.

  • Global deployment : In this case, assemblies are available to every application running on the server.

There are different techniques used for deployment, however, we will discuss the following most common and easiest ways of deployment:

  • XCOPY deployment
  • Copying a Website
  • Creating a set up project

XCOPY Deployment

XCOPY deployment means making recursive copies of all the files to the target folder on the target machine. You can use any of the commonly used techniques:

  • FTP transfer
  • Using Server management tools that provide replication on a remote site
  • MSI installer application

XCOPY deployment simply copies the application file to the production server and sets a virtual directory there. You need to set a virtual directory using the Internet Information Manager Microsoft Management Console (MMC snap-in).

Copying a Website

The Copy Web Site option is available in Visual Studio. It is available from the Website -> Copy Web Site menu option. This menu item allows copying the current web site to another local or remote location. It is a sort of integrated FTP tool.

Using this option, you connect to the target destination, select the desired copy mode:

  • Overwrite
  • Source to Target Files
  • Sync UP Source And Target Projects

Then proceed with copying the files physically. Unlike the XCOPY deployment, this process of deployment is done from Visual Studio environment. However, there are following problems with both the above deployment methods:

  • You pass on your source code.
  • There is no pre-compilation and related error checking for the files.
  • The initial page load will be slow.

Creating a Setup Project

In this method, you use Windows Installer and package your web applications so it is ready to deploy on the production server. Visual Studio allows you to build deployment packages. Let us test this on one of our existing project, say the data binding project.

Open the project and take the following steps:

Step (1) : Select File -> Add -> New Project with the website root directory highlighted in the Solution Explorer.

Step (2) : Select Setup and Deployment, under Other Project Types. Select Setup Wizard.

Select Setup Wizard

Step (3) : Choosing the default location ensures that the set up project will be located in its own folder under the root directory of the site. Click on okay to get the first splash screen of the wizard.

splash screen Wizard

Step (4) : Choose a project type. Select ‘Create a setup for a web application’.

splash screen Wizard2

Step (5) : Next, the third screen asks to choose project outputs from all the projects in the solution. Check the check box next to ‘Content Files from…’

splash screen Wizard3

Step (6) : The fourth screen allows including other files like ReadMe. However, in our case there is no such file. Click on finish.

splash screen Wizard4

Step (7) : The final screen displays a summary of settings for the set up project.

splash screen Wizard5

Step (8) : The Set up project is added to the Solution Explorer and the main design window shows a file system editor.

splash screen Wizard6

Step (9) : Next step is to build the setup project. Right click on the project name in the Solution Explorer and select Build.

splash screen Wizard7

Step (10) : When build is completed, you get the following message in the Output window:

splash screen Wizard8

Two files are created by the build process:

  • Setup.exe
  • Setup-databinding.msi

You need to copy these files to the server. Double-click the setup file to install the content of the .msi file on the local machine.

%d bloggers like this: