CS-, Wsdl.exe, , , Web-. Web-. , Web- . , .
Add Web- Calc.asmx. BeginAdd . EndAdd:
CalculatorWebService calc = new CalculatorWebService ();IAsyncResult res = calc.BeginAdd (2, 2, null, null);...int sum = calc.EndAdd (res);EndAdd Web- , EndAdd , . IsCompleted lAsyncResult, BeginAdd, , Web-, EndAdd:
IAsyncResult res = calc.BeginAdd (2, 2, null, null);...if (res.IsCompleted) { int sum = calc.EndAdd (res);}else { // Try again later}AsyncCallback . EndAdd , , , Web- :
AsyncCallback cb = new AsyncCallback (AddCompleted);IAsyncResult res = calc.BeginAdd (2, 2, cb, null);...public void AddCompleted (IAsyncResult res){ int sum = calc.EndAdd (res);}, , , . Add , , , , .
CityView
Web- CityView (.11) - Web-. Web- - Microsoft TerraService (http://terraservice.net/terraservice.asmx), - Microsoft TerraServer. TerraServer TerraService . http://terraservice.net. TerraServer - , , , Microsoft U.S. Geological Survey. TerraService Web- TerraServer. 16 Web- ConvertPlaceToLonLatPt GetTile. , TerraService Microsoft.NET Framework. WSDL- . http://terraservice.net/terraservice.asmx?wsdl.
. 11.CityView: -
CityView, Web-.
|
|
1. CityView.aspx CityView.ashx .
2. , CityView.aspx CityView.ashx, bin. TerraService.dll bin. TerraService.dll DLL, - TerraService TerraService.
CityView.aspx . (, New York) . Show Image. . CityView , Image not available. , . , TerraService , .
, . 8 . . - , San Francisco, CA 32 .
CityView
CityView :
■ CityView.aspx;
■ CityView, ashx;
■ TerraService.dll.
CityView.aspx Web-, (.12). TextBox , DropDownList , RadioButtonList Button . Image, ImageUrl . , URL Image:
MyImage.ImageUrl = builder.ToString ();Redmond, WA (8 ), , ImageURL, :
CityView.ashx?city=Redmond&state=WA&scale=8CityView CityView.ashx.
CityView.ashx HTTP-. , HTTP-, , . HTTP-, CS-, DLL DLL bin . Web.config.
CityView.ashx HTTP-. , IHttpHandler, ASHX @ WebHandler, , :
<%@ WebHandler Language="C#" Class="CityViewImageGen" %>
ASHX-, WebHandler, ASP.NET . - ASHX- , CONFIG IIS; ASHX- Web-. , , , , , ASP.NET .
CityViewlmageGen CityView.ashx (. 12) , CityView.aspx. ProcessRequest, . ProcessRequest GetTiledlmage. -, Save Bitmap, :
|
|
GetTiledlmage, ProcessRequest , Image not available. : JPEG GIF , .
GetTiledlmage Web- TerraService:
■ ConvertPlaceToLonLatPt (, , ) ;
■ GetAreaFromPt , ( ) AreaBoundingBox ;
■ GetTile ID ( AreaBoundingBox) .
- 200 . TerraService . GetTiledlmage 600X400. Bitmap, . GrapbicsDrawImage . , CityView ( ) . CityView.ashx :
Bitmap bitmap = GetTiledImage (city, state, res, 600, 400);600 400.
CityView TerraService.dll - TerraService. GetTiledlmage CityView.ashx - Web- TerraService:
TS.TerraService ts = new TS.TerraService ();TerraService.dll TerraService.cs, :
wsdl /namespace:TS http://terraservice.net/terraservice.asmx, WSDL- TerraService,
FCL. TerraService.cs , DLL:
esc /t:library terraservice.s
CityView.aspx
<html>
<body>
<h1>CityView</h1>
<hr>
<form runat="server">
<table cellpadding="8">
<tr>
<td>
City
</td>
<td>
<asp:TextBox ID="City" Width="100%" RunAt="server" />
</td>
<td>
<asp:RequiredFieldValidator
ControlToValidate="City"
ErrorMessage="*"
Display="static"
Color="red"
RunAt="server"
/>
</td>
</tr>
<tr>
<td>
State
</td>
<td>
<asp:DropDownList ID="State" Width="100%" RunAt="server">
<asp:ListItem Text="AL" RunAt="server" />
<asp:ListItem Text="AK" RunAt="server" />
<asp:ListItem Text="AR" RunAt="server" />
<asp:ListItem Text="AZ" RunAt="server" />
<asp:ListItem Text="CA" RunAt="server" />
<asp:ListItem Text="CO" RunAt="server" />
<asp:ListItem Text="CT" RunAt="server" />
<asp:ListItem Text="DC" RunAt="server" />
<asp:ListItem Text="DE" RunAt="server" />
<asp:ListItem Text="FL" RunAt="server" />
<asp:ListItem Text="GA" RunAt="server" />
|
|
<asp:ListItem Text="HI" RunAt="server" />
<asp:ListItem Text="IA" RunAt="server" />
<asp:ListItem Text="ID" RunAt="server" />
<asp:ListItem Text="IL" RunAt="server" />
<asp:ListItem Text="IN" RunAt="server" />
<asp:ListItem Text="KS" RunAt="server" />
<asp:ListItem Text="KY" RunAt="server" />
<asp:ListItem Text="LA" RunAt="server" />
<asp:ListItem Text="MA" RunAt="server" />
<asp:ListItem Text="MD" RunAt="server" />
<asp:ListItem Text="ME" RunAt="server" />
<asp:ListItem Text="MI" RunAt="server" />
<asp:ListItem Text="MN" RunAt="server" />
<asp:ListItem Text="MO" RunAt="server" />
<asp:ListItem Text="MS" RunAt="server" />
<asp:ListItem Text="MT" RunAt="server" />
<asp:ListItem Text="NC" RunAt="server" />
<asp:ListItem Text="ND" RunAt="server" />
<asp:ListItem Text="NE" RunAt="server" />
<asp:ListItem Text="NH" RunAt="server" />
<asp:ListItem Text="NJ" RunAt="server" />
<asp:ListItem Text="NM" RunAt="server" />
<asp:ListItem Text="NV" RunAt="server" />
<asp:ListItem Text="NY" RunAt="server" />
<asp:ListItem Text="OH" RunAt="server" />
<asp:ListItem Text="OK" RunAt="server" />
<asp:ListItem Text="OR" RunAt="server" />
<asp:ListItem Text="PA" RunAt="server" />
<asp:ListItem Text="RI" RunAt="server" />
<asp:ListItem Text="SC" RunAt="server" />
<asp:ListItem Text="SD" RunAt="server" />
<asp:ListItem Text="TN" RunAt="server" />
<asp:ListItem Text="TX" RunAt="server" />
<asp:ListItem Text="UT" RunAt="server" />
<asp:ListItem Text="VA" RunAt="server" />
<asp:ListItem Text="VT" RunAt="server" />
<asp:ListItem Text="WA" RunAt="server" />
<asp:ListItem Text="WI" RunAt="server" />
<asp:ListItem Text="WV" RunAt="server" />
<asp:ListItem Text="WY" RunAt="server" />
</asp:DropDownList>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
<fieldset>
<legend>Scale</legend>
<asp:RadioButtonList ID="Scale" RunAt="server"
RepeatColumns="2" RepeatDirection="Horizontal">
<asp:ListItem Text="1 meter" RunAt="server" />
<asp:ListItem Text="2 meters" RunAt="server" />
<asp:ListItem Text="4 meters" RunAt="server" />
<asp:ListItem Text="8 meters" Selected="true"
RunAt="server" />
<asp:ListItem Text="16 meters" RunAt="server" />
<asp:ListItem Text="32 meters" RunAt="server" />
</asp:RadioButtonList>
|
|
</fieldset>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
<asp:Button Text="Show Image" OnClick="OnShowImage"
Width="100%" RunAt="server" />
</td>
<td>
</td>
</tr>
</table>
</form>
<hr>
<asp:Image ID="MyImage" RunAt="server" />
</body>
</html>
<script language="C#" runat="server">
void OnShowImage (Object sender, EventArgs e)
{
StringBuilder builder = new StringBuilder ();
builder.Append ("CityView.ashx?city=");
builder.Append (City.Text);
builder.Append ("&state=");
builder.Append (State.SelectedItem.Text);
builder.Append ("&scale=");
switch (Scale.SelectedIndex) {
case 0:
builder.Append ("1");
break;
case 1:
builder.Append ("2");
break;
case 2:
builder.Append ("4");
break;
case 3:
builder.Append ("8");
break;
case 4:
builder.Append ("16");
break;
case 5:
builder.Append ("32");
break;
}
MyImage.ImageUrl = builder.ToString ();
}
</script>
CityView.ashx
<%@ WebHandler Language="C#" Class="CityViewImageGen" %>
using System;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
public class CityViewImageGen: IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
// Extract user input from the query string
string city = context.Request["City"];
string state = context.Request["State"];
string scale = context.Request["Scale"];
if (city!= null && state!= null) {
// Determine the scale
TS.Scale res = TS.Scale.Scale8m;
if (scale!= null) {
switch (scale) {
case "1":
res = TS.Scale.Scale1m;
break;
case "2":
res = TS.Scale.Scale2m;
break;
case "4":
res = TS.Scale.Scale4m;
break;
case "8":
res = TS.Scale.Scale8m;
break;
case "16":
res = TS.Scale.Scale16m;
break;
case "32":
res = TS.Scale.Scale32m;
break;
}
}
// Generate the requested image
string type = "image/jpeg";
ImageFormat format = ImageFormat.Jpeg;
Bitmap bitmap = GetTiledImage (city, state, res, 600, 400);
// If GetTiledImage failed, generate an error bitmap
if (bitmap == null) {
bitmap = GetErrorImage ("Image not available");
type = "image/gif";
format = ImageFormat.Gif;
}
// Set the response's content type
context.Response.ContentType = type;
// Write the image to the HTTP response
bitmap.Save (context.Response.OutputStream, format);
// Clean up and return
bitmap.Dispose ();
}
}
public bool IsReusable
{
get { return true; }
}
Bitmap GetTiledImage (string City, string State, TS.Scale Scale,
int cx, int cy)
{
Bitmap bitmap = null;
Graphics g = null;
try {
// Instantiate the TerraService proxy
TS.TerraService ts = new TS.TerraService ();
// Get the latitude and longitude of the requested city
TS.Place place = new TS.Place ();
place.City = City;
place.State = State;
place.Country = "USA";
TS.LonLatPt point = ts.ConvertPlaceToLonLatPt (place);
// Compute the parameters for a bounding box
TS.AreaBoundingBox abb = ts.GetAreaFromPt (point,
TS.Theme.Photo, Scale, cx, cy);
// Create an image to fit the bounding box
bitmap = new Bitmap (cx, cy,
PixelFormat.Format32bppRgb);
g = Graphics.FromImage (bitmap);
int x1 = abb.NorthWest.TileMeta.Id.X;
int y1 = abb.NorthWest.TileMeta.Id.Y;
int x2 = abb.NorthEast.TileMeta.Id.X;
int y2 = abb.SouthWest.TileMeta.Id.Y;
for (int x=x1; x<=x2; x++) {
for (int y=y1; y>=y2; y--) {
TS.TileId tid = abb.NorthWest.TileMeta.Id;
tid.X = x;
tid.Y = y;
Image tile = Image.FromStream
(new MemoryStream (ts.GetTile (tid)));
g.DrawImage (tile,
(x - x1) * tile.Width -
(int) abb.NorthWest.Offset.XOffset,
(y1 - y) * tile.Height -
(int)abb.NorthWest.Offset.YOffset,
tile.Width, tile.Height);
tile.Dispose();
}
}
// Return the image
return bitmap;
}
catch (Exception) {
if (bitmap!= null)
bitmap.Dispose ();
|
|
return null;
}
finally {
if (g!= null)
g.Dispose ();
}
}
Bitmap GetErrorImage (string message)
{
// Determine the width and height of the error message
Bitmap bitmap =
new Bitmap (1, 1, PixelFormat.Format32bppRgb);
Graphics g = Graphics.FromImage (bitmap);
Font font = new Font ("Verdana", 10);
SizeF size = g.MeasureString (message, font);
int cx = (int) size.Width;
int cy = (int) size.Height;
bitmap.Dispose ();
g.Dispose ();
// Generate a bitmap containing the error message
bitmap = new Bitmap (cx, cy, PixelFormat.Format32bppRgb);
g = Graphics.FromImage (bitmap);
SolidBrush redBrush = new SolidBrush (Color.Red);
SolidBrush whiteBrush = new SolidBrush (Color.White);
g.FillRectangle (whiteBrush, 0, 0, 256, 64);
g.DrawString (message, font, redBrush, 0, 0);
whiteBrush.Dispose ();
redBrush.Dispose ();
font.Dispose ();
g.Dispose ();
// Return the image
return bitmap;
}
}
. 12. CityView
.NET Framework Software Develop menu Kit (SDK). SDK Windows NT 4.0/2000/XP, Windows..NET Framework SDK 1.0, Service Pack 1.
http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml. We all know that URLs change. If you go to this one and find that its no longer valid, visit the Microsoft.NET home page at for the latest information on where to find the SDK.
URL , , Microsoft.NET (http://www.microsoft.com/net), , SDK.
.NET Framework SDK, Web- Microsoft: Internet Information Services (IIS). ASP.NET Windows 2000 Windows XP, . IIS Professional . IIS, Add or Remove Programs Add/Remove Windows Components. US. IIS SDK , ASP.NET .
Visual Studio.NET .NET Framework SDK . Visual Studio.NET , , . . http://msdn.microsoft.com/vstudio/howtobuy.