Microsoft KB Archive/322744

= How to perform output caching with Web services in Visual Basic .NET =

Article ID: 322744

Article Last Modified on 8/28/2007

-

APPLIES TO


 * Microsoft Web Services Enhancements for Microsoft .NET 1.1
 * Microsoft Web Services Enhancements for Microsoft .NET 2.0
 * Microsoft Visual Basic .NET 2002 Standard Edition
 * Microsoft .NET Framework Class Libraries 1.1
 * Microsoft .NET Framework Class Libraries 1.0

-



This article was previously published under Q322744







For a Microsoft Visual C# .NET version of this article, see 318299.

IN THIS TASK
SUMMARY
 * Requirements
 * Create a new ASP.NET Web service application
 * Create the sample Web service
 * Test the project
 * Troubleshooting

REFERENCES



SUMMARY
This step-by-step article describes how to create a sample ASP.NET Web service that uses output caching. Output caching caches the output response result of a Web service based on the Duration attribute that is specified for a corresponding WebMethod.

Note In ASP.NET 2.0, the HTTP method of the test page has changed from GET to POST. However, POSTs are not normally cached. If you change the test page in an ASP.NET 2.0 Web service application to use GET, caching works properly.

In addition, HTTP indicates that a user agent (the browser or calling application) should be able to override server caching by setting the &quot;Cache-Control&quot; to &quot;no-cache&quot;. ASP.NET applications, therefore, ignore cached results when they find a &quot;no-cache&quot; header.

Note The release version of Visual Studio 2005 only enables you to use the ASP.NET Web Site template and the ASP.NET Web Service template. If you want to use the ASP.NET Web Service Application template or the ASP.NET Web Application template in Visual Studio 2005 together with ASP.NET 2.0, you must install Visual Studio 2005 Service Pack 1. To install Visual Studio 2005 Service Pack 1, visit the following Microsoft Web site:

http://msdn2.microsoft.com/en-us/vstudio/bb265237.aspx

back to the top

Requirements
The following list outlines the recommended hardware, software, network infrastructure, and service packs that are required:
 * Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, or Microsoft Windows XP
 * Microsoft .NET Framework
 * Microsoft Internet Information Services (IIS)

back to the top

Create a new ASP.NET Web service application
Create a new ASP.NET Web Service application named WSCacheSample:  Start Visual Studio .NET. On the File menu, point to New, and then click Project to start the New Project Wizard. Under Project types, select Visual Basic. Under Template, select ASP.NET Web Service. In the Location box, replace &quot;WebService#&quot; in the URL path with the name of your project, WSCacheSample. If you are using the local server, leave the server name as http://localhost, so that the Location box looks similar to this:

http://localhost/WSCacheSample



back to the top

Create the sample Web service
 In Solution Explorer, right-click the project node, point to Add, and then click Add Web Service.</li> For the name, type CacheDemo.asmx, and then click Open. The Web service opens in Design view.</li> Right-click the Web service, and then click View Code.</li>  Add the following code to the CacheDemo.asmx.cs class file. This adds a WebMethod attribute named GetCacheEntryTime with a CacheDuration of 60 seconds. <WebMethod(CacheDuration:=60)> _ Public Function GetCacheEntryTime(ByVal Name As String) As String Dim sb As StringBuilder = New StringBuilder(&quot;Hi &quot;) sb.Append(Name) sb.Append(&quot;, the Cache entry was made at &quot;) sb.Append(System.DateTime.Now.ToString) Return (sb.ToString) End Function NOTE: By default, the CacheDuration for a WebMethod attribute is set to 0, meaning that it is not cached. </li>  Because the sample code uses the StringBuilder method, include a reference to the System.Text namespace. The namespace listing for the Web service looks similar to this: Imports System.Web.Services Imports System.Text NOTE: For more information about the StringBuilder class, visit the following Microsoft Developer Network (MSDN) Web site:

StringBuilder Class

http://msdn2.microsoft.com/en-us/library/system.text.stringbuilder(vs.71).aspx

</li> In the Visual Studio .NET IDE, click Build Solution on the Build menu.</li> On the File menu, click Save All to save the project and the associated files.</li></ol>

back to the top

Test the project
Now that you have created the sample CacheDemo Web service, run the GetCacheEntryTimeWebMethod to see the effects of the CacheDuration attribute setting:  In Solution Explorer, right-click CacheDemo.asmx, and then click View in browser.

The .asmx file opens in the browser, and the GetCacheEntryTimeWebMethod attribute is listed as a bulleted item at the top of the page.</li> Click the GetCacheEntryTime link.</li>  In the Name box for the method, type Joe and then click Invoke to run the WebMethod attribute and return the XML result. Notice the time stamp that is returned in the message.

NOTE: If the WebServices help page does not appear, you can run the WebService method by typing the following in the address box in the Web browser: http://localhost/wscachesample/cachedemo.asmx/GetCacheEntryTime?Name=Joe </li> Run the WebMethod again by typing Joe. NOTE: If you run the WebMethod attribute in the 60 second time period that is specified by the CacheDuration attribute, the same time stamp appears.</li> Repeat step 4, but type Amy instead of Joe in the Name box for the WebMethod attribute parameter.

Notice that the time stamp result is different. This occurs because the default output caching result is based on the parameters of the WebMethod attribute. In this example, Joe is the parameter value for the first two tests and the cached output is returned for the second test. When you use Amy in the third test, you receive a new result. If you repeat the test in 60 seconds, you will receive a cached output result. The difference in the output caching version is related to the parameter of the WebMethod attribute.</li></ol>

back to the top

Troubleshooting
When you decide whether or not to implement output caching for your Web service, remember that server resources can be affected negatively if the WebMethod attribute parameters that are associated with the requests vary widely or if the responses involve large amounts of data.

back to the top

<div class="references_section">