Building a Distributed Web Service Using a Strongly-Typed Da
Building a Distributed Web Service Using a Strongly-Typed DataSet in C#
In the last article in this series, it was described how to create a Web service that consumes another Web service that does not provide its result set in a .NET DataSet, by using the WSDL (Web service description language) which the consumed Web service provides, it is described how to build from this a strongly-typed DataSet that becomes a first-class player in the .NET object model, the benefits of which will become apparent during the coding process explored in this article.
Figure 1 - A distributed Web service application utilizing the QueryandPackage Web service
The QueryandPackage Web service this article describes how to build queries Microsoft's Best Bets Search Web service and packages the results in a strongly-typed DataSet, which any .NET Web Form or Win Form application can use.
This Web service, along with Microsoft's Best Bets Search Web service will form the basis for a distributed Web service application in keeping with the design goals of Microsoft .NET.
In this article, it will be shown how easy and simple it is to design, build and manage a distributed Web application that provides valuable services to clients. The article will also point out and explore the key .NET features that aid the structuring and implementation of the Web service as it goes through the coding process.
Getting In The Flow
The first thing to do is to prepare a flow chart of the actions that the Web service will take. In Visual Studio.Net Beta 1, there are some great built-in modeling tools that will help in this process as well as offering the great benefit of keeping these modeling files with the project. However, these tools are not yet fully usable, so in this article Microsoft Visio is employed for this purpose:
Figure 2: Query and Package WebService Flow Chart
Figure 2, above, displays the flow of the process that the Web service will provide, but it does express a design. So let's look at that as well.
Implementing a .NET Design Approach
Remember that .NET is based on an object-oriented foundation, emphasizing component development, modularity and code reusability. This means that when designing an application in .NET, it is desirable to explore how to design the application in such a way that it is made up of components that can be used by other components.
This approach can be applied to a Web service as follows:
.NET uses an .ASMX file to represent a Web service. Think of the .ASMX file as the front-end, or gateway to a service. It does not necessarily have to directly house the service itself. The Web service can call a component or components that do the work of the Web service.
The advantages to this approach are many. For example, separating the component from the Web service enables to component to be used by other applications, be they other Web services, server applications or client applications.
Further, the .NET platform enables existing components created with Win32 or COM technologies to be called from .NET, enabling .NET applications to be based on existing code bases. This capability enables the migration to .NET to occur very smoothly and in stages that work best for the organization they serve - yet another way in which .NET sets a standard for flexibility in implementation.
Following this design approach, here is a representation of the way in which Web services can be implemented:
Figure 3 - .NET Web service design
So, in the same manner that ASP.NET introduces the idea that the code that runs with a page is separated from the HTML that is on that page, design of functionality within .NET applications are meant to follow this component-based approach.
Building the WebService
In this Web service, only one component is required to do the work specified in Figure 2. The steps and code to build this Web service follow. It is assumed that the reader has read and implemented part one of this article and has created a Web service project in VS.NET Beta 1, consumed the Microsoft Best Bets Web service and has created a strongly-typed DataSet that is part of the object model of this project. The steps to complete the Web service pick up where the last article left off.
The reader should have the Web service project open with the following files in place:
Code Discussion
The first step will be to create a component in the project and code it to perform the desired steps:
1. Right-Click on the C# Search WebService icon and choose Add Component…
2. An "Add New Item" dialog will come up - name the component QueryandPackage and press return;
3. Right-click on the newly created file, QueryandPackage.cs and choose "View Code";
The code window opens. Note that Visual Studio has created the shell of the component as a .NET component object which can be viewed with the Class Viewer in Visual Studio:
The component object has been created with the following features:
The Namespace of the code file is set to default Namespace of
the project, thereby setting it logically in the hierarchy of the object model
of the project. Namespaces provide a logical organizational system. Namespaces
are used both as an "internal" organization system for a program, and as an
"external" organization system-a way of presenting program elements that are
exposed to other programs;
The SearchandQuery class is declared - the
component object itself is created as a subclass of the .NET class
System.ComponentModel.Component. A component, as defined by .NET, is an
object that allows the use of objects supplied by another application or of
exposing its own objects for use by another application.
components
object variable of type System.ComponentModel.Container is declared. This object
is part of the component model and is the object that hosts the component. It
has the ability to query and get services about the components it hosts and is
instantiated as part of the constructor, which follows.
SearchandQuery
constructor is declared - this is the constructor for the component object
itself and is called whenever an instance of SearchandQuery is instantiated. It
calls the following method by default:
InitializeComponent() - this
default method is called when the SearchandQuery constructor is called. It
instantiates the container object for this component, which is how components
communicate with the environment they are hosted in and are integrated into the
visual designer of VS.NET.
4. In the code window, move to the bottom of
the window and type the following code at the end of the InitializeComponent()
method:
public dsBBI QueryandPackage(string strQuery)
{
//Instantiate new MS search object
MS_Search.MSComSearchService srch = new
MS_Search.MSComSearchService();
//Instantiate BestBetData object to hold complete
result
MS_Search.BestBetsData bbd = new
MS_Search.BestBetsData();
//Pass the query and put results in BestBetsData
object
bbd = srch.GetBestBets(strQuery);
//Instantiate Strongly-Typed DataSet in preparation for
use
dsBBI ds = new dsBBI();
//Declare DataRow object from strongly-typed dataset in
preparation for use
dsBBI.BestBetItemRow dr;
//Move results into DataSet
for(int i = 0 ;i <=
(bbd.BestBetsCount - 1);i++)
{
//Create
new DataRow
dr =
ds.BestBetItem.NewBestBetItemRow();
//Populate DataRow
dr.DisplayTerm = bbd.BestBetsItems[i].DisplayTerm;
dr.Rank = bbd.BestBetsItems[i].Rank;
dr.Set =
bbd.BestBetsItems[i].Set;
dr.Title =
bbd.BestBetsItems[i].Title;
dr.Url =
bbd.BestBetsItems[i].Url;
//Add new DataRow
ds.BestBetItem.AddBestBetItemRow(dr);
}
return ds;
}
As this
code is typed, note that any references to the external Web service or the
strongly-typed dataset cause the Intellisense code system to provide access to
the complete object model of these objects at the same level of support any .NET
framework object. This is part of what is meant when Microsoft says that these
objects become "first-class players" in the object model. See below for an
example of this:
In the above code, a for loop is used to move the results into the strongly-typed DataSet. Close the component's code window and save any changes.
5. One more feature here: built-in documentation for C# - on the blank line just above the beginning of the method, type three slashes - "///" as follows and VS.NET automatically creates an XML entry in the code that allows the method to be documented as follows:
6. Type the following on the line in between the summary tags: This method goes out the the MS Search Web service and returns dsBBI, a strongly-typed DataSet as a result.
In the next few steps, the manner in which this documentation feature makes working in VS7 easier than ever before will be shown.
7. The next step is to add code to the Web service itself so that it will call the component. Right-click on the WebService1.asmx file in the Solution Explorer and choose "View Code":
The code window will open.
8. Move to the bottom of the window and type the following code:
[WebMethod (Description = "This Web service passes a query to
the MS BestBets search service and packages the result in a strongly-typed
DataSet.")]
public dsBBI QueryandPackage(string
strQuery)
{
//Instantiate Component
SearchandQuery component = new SearchandQuery();
//Instantiate DataSet
dsBBI ds = new
dsBBI();
//Call Method
ds =
component.QueryandPackage(strQuery);
//return value
return ds;
}
Again, note as this code is typed that the intellisense provides
pop-up references to all objects. This time, when typing the line ds =
component., allow the pop-up list to display and scroll to the method of the
component QueryandPackage and look at what appears - the documentation reference
that was typed in step 6.
So in .NET, it is not necessary to remember everything - the environment provides a broad level of support in providing the programmer with information as it is needed - in this case an explanation of what the method does and the parameters to be passed to it.
9. This concludes the required coding to make the Web service function. Save and close the window.
10. Go to the Build menu and choose "Build".
11. Now to test the service, press F5 on the keyboard. A Web page window will appear that provides a way to test the Web service. Type "Exchange" in the value field and press the "Invoke" button:
Note that the Web service requires connectivity to the internet in order to work. In a few moments an XML representation of the result set will be returned - the Web service functions as expected.
Next Article
The nature of objects will be explored in the next article.
- 1InterOP Stack新一代平台互操作技术:InterOP Stack技术概览
- 2[原创]OA选择首先要清晰概念
- 3微软为创建和使用Web服务另辟蹊径
- 4当软件变成服务时
- 5企业借OA节省费用,减轻金融风暴影响
- 6XML Web Service-Enabled Office Documents
- 7Sharing information through the Lotus Knowledge Discovery Sy
- 8Web服务设计师,第1部分:动态电子商务介绍
- 9无SOAP的Web服务,第二部分
- 10Accessing Server Variables From Within Web Services
- 11关于群体智慧积累和传递的思考(by AMT 王玉荣)
- 12美国三大IT巨头将向OASIS提交Web服务安全标准
- 13Web服务内幕,第8部分:关于Soap的决策
- 14SOAP技术与B2B应用集成--SOAP的消息结构与数据的组织方法
- 15Building an ASP.NET Web Service
- 162001年度“世界最受赞赏的知识型企业”排名揭晓
- 17从纺织行业看知识库及专家系统构建信息平台
- 18由知识螺旋看知识创新(BY AMT 夏敬华 编译)
- 19创造性的Intranet:Factors for Corporate Knowledge Creation
- 20Favorites Service Overview
- 21ITToolBox e-Business(by AMT整理)
- 22石家庄OA信息化还得管知识过程(by AMT 夏敬华)
- 23Licensing
- 24对于石家庄OA信息化的几种不同理解(BY AMT 夏敬华)
- 25BEA举办BEA WebLogic Platform 7.0新产品推介会
- 26架构Web Service:基于Web服务的应用、解决方案和开发平台
- 27Web服务设计师,第5部分:基于付费Web服务的障碍
- 28石家庄OA信息化与企业发展
- 29xml and KM
- 30网络服务热火如潮 前景扑朔迷离
成都公司:成都市成华区建设南路160号1层9号
重庆公司:重庆市江北区红旗河沟华创商务大厦18楼