监理公司管理系统 | 工程企业管理系统 | OA系统 | ERP系统 | 造价咨询管理系统 | 工程设计管理系统 | 甲方项目管理系统 | 签约案例 | 客户案例 | 在线试用
X 关闭
上海OA信息化

当前位置:工程项目OA系统 > 泛普各地 > 上海OA系统 > 上海OA信息化

Defining .NET and how to build a Client Application for a di

申请免费试用、咨询电话:400-8352-114

AMTeam.org

Defining .NET and how to build a Client Application for a distributed Web Service Architecture
 
By: Barton Friedland

 

What is your definition of .NET?

If you have read my previous articles on .NET, you will know that regardless of the specific tasks being discussed, the underlying focus is on understanding what .NET is and how to get the most out of it.

This article, the third in a series of three, demonstrates the assembly of a Client Application, or User Interface for a Web service application that was created in the previous articles. In this case, the Web service being called upon by the Client Application is itself another Web service - which makes the architecture a model of the type of distributed application .NET is advocating, as depicted in the diagram below:

This article will focus on the left column in the diagram above, but in this article more than any of the others, I want to take a little extra time to make clear for the reader what .NET really is. The reason for this is that since I started writing these articles, I have spoken to more and more people about .NET, and from everyone I speak to, I hear very different perspectives about what .NET is. Most of what I hear is a piece of .NET - something it does or something that it enables. But .NET is more than the sum of its parts - its true benefit lies in the principles of its design.

In a previous article, Generating a Strongly-Typed DataSet from a Web Service, I demonstrated how .NET enables a developer to both create new and consume existing objects from an external Web service in such a way that those objects are real "first-class players" in the programming model of the application. Referring to those objects within the code then becomes as easy as referencing any other object in .NET - there is nothing special to remember and the custom objects show up just like objects that ship with .NET.

In the next article, Building a Distributed Web Service Using a Strongly-Typed DataSet in C#, I demonstrated how easy it is to build a new Web service that depends on another Web service to perform meaningful and helpful processing, building a loosely-coupled and distributed architecture in the process.

Certainly .NET is many things - a new set of technologies, new versions of old technologies, a Microsoft strategic investment, and a marketing direction - but .NET is much more than all of these.

What is .NET - Really?

.NET is fundamentally a set of ideas based on two principles - vision and unification.

The vision is of a software architecture that will make possible Microsoft's goal of creating a world where the application is invisible to the user - where the user can get the information they want from the device they want wherever they may be.

The unification part of it is what .NET is about today. .NET's unifying principles are a way of thinking about software architecture and development; guiding principles if you will. The basic steps Microsoft has taken by creating the .NET framework and building block services are as follows:

Create an organized and consistent framework where all existing development technologies have a place or location within the framework
Within this framework, ensure that all areas of the framework are addressable from anywhere else in the framework using a simple and consistent addressing model

Wherever possible, provide tools and mechanisms to automate the creation of code for routine tasks that support basic functionality and communication across the framework.

These principles have some very broad ramifications for Microsoft. For them to implement .NET effectively, virtually every piece of functional and usable software, including all of their servers, will have to be rewritten to be able to fully create and interact with .NET. And this is what makes .NET so unique - think for a moment about the fact that there is probably no other software company in the world with such a vast a set of broadly based software assets as Microsoft - and .NET will make all of them accessible from one consistent framework.

Think about today's disparate Microsoft languages and technologies such as ADO, ATL, ASP, C++, COM, COM+, CDO, MFC, MSMQ, IIS, SQL, Visual Basic, VBA, and VBScript, Today, knowledge of one of these technologies does not imply knowledge of the others. And in many cases today, the way one approaches or programs one technology has no bearing on the other. And yet, today's solutions often depend on a variety of these disparate technologies.

The principle of unification that .NET follows will bring these technologies, and others, into a more stable alignment that sets a standard baseline for behavior going forward. A key benefit of this approach for developers is that knowledge of one technology will provide more of a basis for understanding and utilizing others in the framework.

These principles are the same as those employed by previous innovations such as the Macintosh interface and the original version of Windows. For example, the menu bar provided a way to make commands consistent across all applications. Similarly, the .NET framework provides that level of consistency to the programming model.

Is .NET "New"?

.NET is an initiative to implement a number of ideas that have been around for a while, so in that sense it is not 'new'. It represents the distillation of the best of these ideas into an overall framework whose structure will allow more people will have access to its contents.

It is therefore natural that the way people will first perceive .NET will be as something very specific to what they do and ay not see the broader context. What I hope to bring the reader's attention is this: .NET is a way of consistently approaching and utilizing all of Microsoft's programming assets. It will have a lasting and positive effect on the way the world looks at system architecture and design. I should qualify that by saying that I do not think there is a 'right' approach, however, I would go as far to say that results one achieves are more often consistent with the designs behind their efforts than not.

I will now move on to the application of these principles in the finishing touches to a distributed Web service application that makes use of Microsoft's Best Bets search Web service .

Decoupling with .NET

This article will now demonstrate how to build a Client App or Presentation Tier depicted in the yellow area of the diagram below. It will do so using the WebForms portion of the .NET framework.

In previous articles, other areas of the .NET framework (depicted in the diagram in red, blue and green) have been utilized in order to build the supporting data access tier. However, unlike a traditional client / server application, .NET allows us to decouple this tier from the client and establish it as a standalone Web service. In this case, I have placed this Web service on the Internet at the following location:

http://www.aspnextgen.com/services/SearchWebService.asmx

This loosely coupled approach allows a single Web service to easily be consumed and part of many client applications or even other Web services, providing flexibility and following a more component-like model.

Try the Search Client

Before I demonstrate how to build a Web Forms client, I thought it might help to demonstrate a finished version of the client application to crystallize the functionality being encapsulated by it.

Go to the following web page: http://www.aspnextgen.com/services/MS_Search.aspx

The following should appear:


Enter the search string "Exchange" in the search field and click "Submit".
The following result set should appear:


This Web Forms client makes use of several user interface (UI) elements available in the .NET Web Forms library. These elements provide the basic functionality for the page and also communicate with the Web service that supports the client.

Next, I will demonstrate how to build a similar client that makes use of the same Web service .

Creating the Search Client Project in VS7 Beta 1

Launch Visual Studio .NET Beta 1

On the File menu, point to New, and then click Project.

In the New Project dialog box, select Visual C# Projects folder.

Click the Web Application icon.

Change the name of the project to MSSearchClient.

If necessary, enter the address of a Web server on which you can develop the Web service.

Note: This server is referred to as your development server. By default, the development server is the same machine as where Visual Studio is installed. The project is developed and built on the development server.

Click OK to create the project. Visual Studio automatically creates the necessary files and includes the needed references to support a Web Application.

Close the Web Form (WebForm1.aspx) window that VS7 automatically created.

In the Solution Explorer right click on the WebForm1.aspx icon and choose Rename

Rename the file to "Client_MSSearch.aspx"

The next step is to set a reference to the Web service this application will use, otherwise known as Consuming a WebService.

Consuming the WebService

In the Solution Explorer, right click on the project icon and choose "Add Web Reference".

In the Add Web Reference dialog, type the following Web service address: http://www.aspnextgen.com/services/SearchWebService.asmx

When the page loads, click Add Reference. Visual Studio then performs a discovery of the service, which creates the following directory in the Solution Explorer:

 

The service is now a referenced object within the project and its classes and members are available. Have a look in the Class View:

Note that VS7 has 'consumed' the object model of both the result set the Web service provides (dsBBI) and the Web service itself (WebService1). Without any coding, these objects are now a part of the object model of the application and available to use.

The next step in the process is to design and then create the objects that will exist in the Client Application that will form the user interface and communicate with the Web service .

Designing a WebForms User Interface

The design of the UI is driven by what information the user needs to interact with. In this case, these are the requirements:

User enters search string

User clicks submit or cancel button

Field validation occurs

Results are displayed

Based on this required functionality, the following .NET WebForms library objects will fulfill these functions:

Object Name Object Type LblOutput System.Web.UI.WebControls.Label TxtQuery System.Web.UI.WebControls.TextBox RequiredFieldValidator1 System.Web.UI.WebControls.RequiredFieldValidator BtnSubmit System.Web.UI.WebControls.Button BtnClear System.Web.UI.WebControls.Button LblMessage System.Web.UI.WebControls.Label dataGrid1 System.Web.UI.WebControls.DataGrid

 
Laying Out the WebForms User Interface

In the Solution Explorer, double-click the file Client_MSSearch.aspx to open it.

From the Toolbox, drag a the object types listed in the table above to the page so that it looks like this:

Now, by using the Properties window and selecting each object individually, set the following properties of these objects:

Object Name Property Value LblOutput Font Verdana, 10px LblOutput ForeColor Red LblOutput Text Please enter a query in the field below: LblOutput ID LblOutput TxtQuery Font Arial TxtQuery ID TxtQuery RequiredFieldValidator1 ErrorMesage *You must enter a query. RequiredFieldValidator1 ControlToValidate TxtQuery RequiredFieldValidator1 ID RequiredFieldValidator1 btnSubmit Font Name Arial btnSubmit Text Submit btnSubmit AccessKey s btnSubmit ToolTip Press alt-s as a keyboard shortcut for this button btnSubmit ID btnSubmit btnClear Font Name Arial btnClear Text Clear btnClear AccessKey c btnClear ToolTip Press alt-c as a keyboard shortcut for this button btnClear ID btnClear LblMessage Font Verdana, 10px LblMessage ForeColor Red LblMessage Text Your query produced no result. Please try again. LblMessage Visible FALSE LblMessage ID LblMessage DataGrid1 Visible FALSE

After setting these properties, the page should look like this:

Press F7 to view the code for this web page. Upon inspection, it will be noted that VS7 has taken care of declaring every user interface object on the page and kept the names in sync.

Close the code window.

Connecting the DataGrid

The DataGrid object on the page has not yet had its properties set. For the DataGrid to work, a connection to a DataSet (which is the return value of the Web service & represents the set of data that corresponds to the User's query) and an object known as a DataView (which, as the name implies, is a particular view of that DataSet) must be declared. VS7 allows creation of these objects easily through user interface tools as follows:

1. In the Solution Explorer, right-click on the Web service reference "com.aspnextgen.www" and choose Rename

2. Rename the Web service reference to SearchService. Technically, this should not be required, but a bug in VS7 Beta 1 will not recognize references that have a Namespace deeper than one "." (dot). To have VS7 recognize the dataset that was provided as part of the consumption of the Web service , this step and the next are required.

3. Right-click on the SearchService icon in the Solution Explorer and choose Update Web Reference:

This will rewrite the code supporting the Web service reference to include the Namespace change:

4. From the ToolBox, click on the Data tab.

5. Drag a DataSet icon onto the web form page. The following dialog will appear:

Click OK and VS7 will code an instance of the return value DataSet into the page, creating a "Tray" at the bottom of the screen that looks like this:

6. From the ToolBox, drag a DataView onto the page.

7. With the DataView selected, open the Properties window and set the following property of the DataView:

This sets the value of the DataView to the BestBetsItem table of the DataSet, the result set that will be displayed to the user.

At this stage, the benefits of .NET should be very clear - all of these properties have been set without writing one line of code. In fact, an object that was created in another application has been consumed and brought up to the UI level all through the VS7 interface. This saves a lot of time and is only the tip of the iceberg.

8. Now click on the DataGrid, open the Properties window and set the following property of the DataGrid:

And now look at the DataGrid:

VS7 now "knows" the data that will populate the DataGrid. This is very impressive level of integration between "layers".

Note: Due to a bug in VS7 Beta 1, if the user closes VS7 and reopens it, the UI of VS7 will not redraw the DataGrid as shown above, however, the properties are retains.

The next step is to format the DataGrid to show the desired data to the user out of the possible set available from the DataSet.

Formatting the DataGrid

Out of all of the data available from the Web service , three fields are desired to display to the user and in this order:

Rank

Title

URL

To format the DataGrid to display these columns properly, follow these steps:

1. Click on the DataGrid.

2. At the bottom of the Properties window, click the Property Builder. A dialog box will come up.

3. Click the  icon and the following will appear:

4. Untick the item "Create columns authomatically at runtime"

5. Move the Rank and Title fields to the Selected Columns window.

6. Scroll to the bottom of the list in the Available Columns window and select HyperLink Column, bringing it to the Selected Columns window.

7. Set the following properties for the HyperLink Column:

8. Click OK. The DataGrid should look like this:

9. Click once on the DataGrid, open the Properties window and set font to Arial, 10px. The DataGrid should then look like this:

The DataGrid is now ready for use.

The final step is to write the code that the page will run to connect to the Web service and do its work.

Coding the Web Form

So now all of the user interface objects that the .NET WebForms library provides are in place, their properties are set and all that is left is the code that runs the page itself. Here is a flow chart of the behavior of the page:

To code this behavior, follow these steps:

1. Double-click the Submit button on the Web Form. This will open the code window and create a stub for the click event, public void btnSubmit_Click (object sender, System.EventArgs e).

2. Type the following code inside of this method and note all of the intellisense support provided by VS7:

{
 
//Check to see if the field validator / page is valid
 
if (Page.IsValid)
 
{
   
//hide datagrid if visible
   
if(DataGrid1.Visible = true)
   
{
     
DataGrid1.Visible = false;
   
}

//hide error lable if visible
   
if(LblMessage.Visible = true)
   
{
     
LblMessage.Visible = false;
   
}

//Instantiate Web service
   
SearchService.WebService1 ss = new SearchService.WebService1();

 //Query Web service and place result in dataset
   
dsBBI1 = ss.QueryandPackage(TxtQuery.Text);
 
//Check to see if there is data in the table
   
if(dsBBI1.BestBetItem.Rows.Count == 0)
   
{
     
LblMessage.Visible = true;
     
return;
   
}

 //sort data
   
dsBBI1.BestBetItem.DefaultView.Sort = "Rank";

//set view
   
dataView1 = dsBBI1.BestBetItem.DefaultView;

//Bind DataGrid
   
DataGrid1.DataBind();

//Set DataGrid to Visible
   
DataGrid1.Visible = true;
 
}

3. Now the code for the Clear button - return to the Web Form layout design page and double-click on the Clear button to have VS7 generate the code stub for this event - public void btnClear_Click (object sender, System.EventArgs e).

4. Enter the following code between the brackets:

TxtQuery.Text = "";
   
LblMessage.Visible = false;
   
DataGrid1.Visible = false; 

5. Save and compile.

Testing the Application

The application should now be complete and run properly. To test it, follow these steps:

1. Press Ctrl + F5 which will run the application in VS7 without setting up debugging. The following window should appear:

2. Click in the query field and type "Exchange".

3. Click "Submit" - after a few moments, the following results should appear:

Conclusions - Where to go from here

The three articles I have written show how to write an end-to-end .NET application while also providing a broad overview of the .NET vision. I have also provided some useful techniques on how to approach the design of the various components that make up this application.

If you do not already have a solid understanding of object-oriented design principles, I would definitely suggest getting a good reference on the subject. .NET is a thoroughly object-oriented system, so to get the most out of it, a good basis in the concepts is essential.

The best source for examples for how to program with .NET is the SDK, which provides a lot of helpful examples. The SDK is installed as part of VS7 Beta 1.

I hope you have enjoyed my introductory series of .NET articles and wish you all the best of luck with .NET!

发布:2007-03-24 18:00    编辑:泛普软件 · xiaona    [打印此页]    [关闭]
相关文章:
上海OA系统
联系方式

成都公司:成都市成华区建设南路160号1层9号

重庆公司:重庆市江北区红旗河沟华创商务大厦18楼

咨询:400-8352-114

加微信,免费获取试用系统

QQ在线咨询