Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten przykład pokazuje, jak serwer proxy usługi komunikuje się z usługą TerraService ASMX przy użyciu właściwości kanału WS_HTTP_PROXY_SETTING_MODE_CUSTOM.
- AsmxCustomProxyClient.cpp
- terraserviceusa.com.wsdl
- Tematy pokrewne
AsmxCustomProxyClient.cpp
//------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
//------------------------------------------------------------
#include "windows.h"
#include "winhttp.h"
#ifndef UNICODE
#define UNICODE
#endif
#include "WebServices.h"
#include "process.h"
#include "stdio.h"
#include "string.h"
#include "terraserviceusa.com.wsdl.h"
// Print out rich error info
void PrintError(HRESULT errorCode, WS_ERROR* error)
{
wprintf(L"Failure: errorCode=0x%lx\n", errorCode);
if (errorCode == E_INVALIDARG || errorCode == WS_E_INVALID_OPERATION)
{
// Correct use of the APIs should never generate these errors
wprintf(L"The error was due to an invalid use of an API. This is likely due to a bug in the program.\n");
DebugBreak();
}
HRESULT hr = NOERROR;
if (error != NULL)
{
ULONG errorCount;
hr = WsGetErrorProperty(error, WS_ERROR_PROPERTY_STRING_COUNT, &errorCount, sizeof(errorCount));
if (FAILED(hr))
{
goto Exit;
}
for (ULONG i = 0; i < errorCount; i++)
{
WS_STRING string;
hr = WsGetErrorString(error, i, &string);
if (FAILED(hr))
{
goto Exit;
}
wprintf(L"%.*s\n", string.length, string.chars);
}
}
Exit:
if (FAILED(hr))
{
wprintf(L"Could not get error string (errorCode=0x%lx)\n", hr);
}
}
// Main entry point
int __cdecl wmain(int argc, __in_ecount(argc) wchar_t **argv)
{
UNREFERENCED_PARAMETER(argc);
UNREFERENCED_PARAMETER(argv);
HRESULT hr = NOERROR;
WS_ERROR* error = NULL;
WS_SERVICE_PROXY* serviceProxy = NULL;
WS_HEAP* heap = NULL;
WS_ENDPOINT_ADDRESS address = {};
WS_STRING serviceUrl = WS_STRING_VALUE(L"https://terraservice.net/TerraService2.asmx");
WS_CHANNEL_PROPERTY channelPropertyArray[4];
WS_ADDRESSING_VERSION addressingVersion = WS_ADDRESSING_VERSION_TRANSPORT;
WS_ENVELOPE_VERSION envelopeVersion = WS_ENVELOPE_VERSION_SOAP_1_1;
WS_STRING place = WS_STRING_VALUE(L"");
WS_HTTP_PROXY_SETTING_MODE proxySettingMode = WS_HTTP_PROXY_SETTING_MODE_CUSTOM;
WS_CUSTOM_HTTP_PROXY customProxy = {};
address.url = serviceUrl;
WINHTTP_AUTOPROXY_OPTIONS autoProxyOptions = {};
WINHTTP_PROXY_INFO proxyInfo = {};
HINTERNET session = NULL;
channelPropertyArray[0].id = WS_CHANNEL_PROPERTY_ADDRESSING_VERSION;
channelPropertyArray[0].value = &addressingVersion;
channelPropertyArray[0].valueSize = sizeof(addressingVersion);
channelPropertyArray[1].id = WS_CHANNEL_PROPERTY_ENVELOPE_VERSION;
channelPropertyArray[1].value = &envelopeVersion;
channelPropertyArray[1].valueSize = sizeof(envelopeVersion);
channelPropertyArray[2].id = WS_CHANNEL_PROPERTY_HTTP_PROXY_SETTING_MODE;
channelPropertyArray[2].value = &proxySettingMode;
channelPropertyArray[2].valueSize = sizeof(proxySettingMode);
channelPropertyArray[3].id = WS_CHANNEL_PROPERTY_CUSTOM_HTTP_PROXY;
channelPropertyArray[3].value = &customProxy;
channelPropertyArray[3].valueSize = sizeof(customProxy);
// This part illustrates how to setup a HTTP header authentication security binding
// against the HTTP proxy server in case it requires authentication.
// declare and initialize a default windows credential
WS_STRING_WINDOWS_INTEGRATED_AUTH_CREDENTIAL windowsCredential = {}; // zero out the struct
windowsCredential.credential.credentialType = WS_STRING_WINDOWS_INTEGRATED_AUTH_CREDENTIAL_TYPE; // set the credential type
// for illustration only; usernames and passwords should never be included in source files
windowsCredential.username.chars = L"domain\\user";
windowsCredential.username.length = (ULONG)wcslen(windowsCredential.username.chars);
windowsCredential.password.chars = L"password";
windowsCredential.password.length = (ULONG)wcslen(windowsCredential.password.chars);
// declare and initialize properties to set the authentication scheme to Basic
ULONG scheme = WS_HTTP_HEADER_AUTH_SCHEME_NEGOTIATE;
ULONG target = WS_HTTP_HEADER_AUTH_TARGET_PROXY;
WS_SECURITY_BINDING_PROPERTY httpProxyAuthBindingProperties[2] =
{
{ WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_SCHEME, &scheme, sizeof(scheme) },
{ WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_TARGET, &target, sizeof(target) }
};
// declare and initialize an HTTP header authentication security binding for the HTTP proxy server
WS_HTTP_HEADER_AUTH_SECURITY_BINDING httpProxyAuthBinding = {}; // zero out the struct
httpProxyAuthBinding.binding.bindingType = WS_HTTP_HEADER_AUTH_SECURITY_BINDING_TYPE; // set the binding type
httpProxyAuthBinding.binding.properties = httpProxyAuthBindingProperties;
httpProxyAuthBinding.binding.propertyCount = WsCountOf(httpProxyAuthBindingProperties);
httpProxyAuthBinding.clientCredential = &windowsCredential.credential;
// declare and initialize the array of all security bindings
WS_SECURITY_BINDING* securityBindings[1] = { &httpProxyAuthBinding.binding };
// declare and initialize the security description
WS_SECURITY_DESCRIPTION securityDescription = {}; // zero out the struct
securityDescription.securityBindings = securityBindings;
securityDescription.securityBindingCount = WsCountOf(securityBindings);
// Create an error object for storing rich error information
hr = WsCreateError(
NULL,
0,
&error);
if (FAILED(hr))
{
goto Exit;
}
// Create a heap to store deserialized data
hr = WsCreateHeap(
/*maxSize*/ 2048,
/*trimSize*/ 512,
NULL,
0,
&heap,
error);
if (FAILED(hr))
{
goto Exit;
}
session = WinHttpOpen(L"NWS Example",
WINHTTP_ACCESS_TYPE_NO_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS,
WINHTTP_FLAG_ASYNC);
if (!session)
{
hr = HRESULT_FROM_WIN32(GetLastError());
goto Exit;
}
autoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_RUN_INPROCESS | WINHTTP_AUTOPROXY_AUTO_DETECT;
autoProxyOptions.dwAutoDetectFlags = WINHTTP_AUTO_DETECT_TYPE_DHCP | WINHTTP_AUTO_DETECT_TYPE_DNS_A;
autoProxyOptions.fAutoLogonIfChallenged = FALSE;
WinHttpGetProxyForUrl(
session,
serviceUrl.chars,
&autoProxyOptions,
&proxyInfo);
if (proxyInfo.dwAccessType == WINHTTP_ACCESS_TYPE_NAMED_PROXY)
{
if (proxyInfo.lpszProxy)
{
customProxy.servers.chars = proxyInfo.lpszProxy;
customProxy.servers.length = (ULONG)wcslen(proxyInfo.lpszProxy);
}
if (proxyInfo.lpszProxyBypass)
{
customProxy.bypass.chars = proxyInfo.lpszProxyBypass;
customProxy.bypass.length = (ULONG)wcslen(proxyInfo.lpszProxyBypass);
}
}
hr = WsCreateServiceProxy(
WS_CHANNEL_TYPE_REQUEST,
WS_HTTP_CHANNEL_BINDING,
&securityDescription,
NULL,
0,
channelPropertyArray,
WsCountOf(channelPropertyArray),
&serviceProxy,
error);
if (FAILED(hr))
{
goto Exit;
}
// Open channel to address
hr = WsOpenServiceProxy(
serviceProxy,
&address,
NULL,
error);
if (FAILED(hr))
{
goto Exit;
}
for (int i = 0; i < 100; i++)
{
LonLatPt point = {10.0, 10.0};
hr = TerraServiceSoap_ConvertLonLatPtToNearestPlace(
serviceProxy,
&point,
&place,
heap,
NULL,
0,
NULL,
error);
if (FAILED(hr))
{
goto Exit;
}
wprintf(L"Place @ Latitude=%f, Longitude=%f is %s\n",
point.Lon,
point.Lat,
place);
fflush(stdout);
hr = WsResetHeap(
heap,
error);
if (FAILED(hr))
{
goto Exit;
}
}
Exit:
if (FAILED(hr))
{
// Print out the error
PrintError(hr, error);
}
fflush(
stdout);
if (proxyInfo.lpszProxy)
{
::GlobalFree(proxyInfo.lpszProxy);
}
if (proxyInfo.lpszProxyBypass)
{
::GlobalFree(proxyInfo.lpszProxyBypass);
}
if (serviceProxy != NULL)
{
WsCloseServiceProxy(serviceProxy, NULL, NULL);
WsFreeServiceProxy(serviceProxy);
}
if (!session)
{
WinHttpCloseHandle(session);
}
if (heap != NULL)
{
WsFreeHeap(heap);
}
if (error != NULL)
{
WsFreeError(error);
}
fflush(stdout);
return SUCCEEDED(hr) ? 0 : -1;
}
terraserviceusa.com.wsdl
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="https://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="https://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="https://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="https://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="https://terraservice-usa.com/" xmlns:s="https://www.w3.org/2001/XMLSchema" xmlns:http="https://schemas.xmlsoap.org/wsdl/http/" targetNamespace="https://terraservice-usa.com/" xmlns:wsdl="https://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="https://terraservice-usa.com/">
<s:element name="ConvertLonLatPtToNearestPlace">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="point" type="tns:LonLatPt" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="LonLatPt">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="Lon" type="s:double" />
<s:element minOccurs="1" maxOccurs="1" name="Lat" type="s:double" />
</s:sequence>
</s:complexType>
<s:element name="ConvertLonLatPtToNearestPlaceResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="ConvertLonLatPtToNearestPlaceResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ConvertLonLatPtToUtmPt">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="point" type="tns:LonLatPt" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ConvertLonLatPtToUtmPtResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="ConvertLonLatPtToUtmPtResult" type="tns:UtmPt" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="UtmPt">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="Zone" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="X" type="s:double" />
<s:element minOccurs="1" maxOccurs="1" name="Y" type="s:double" />
</s:sequence>
</s:complexType>
<s:element name="ConvertUtmPtToLonLatPt">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="utm" type="tns:UtmPt" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ConvertUtmPtToLonLatPtResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="ConvertUtmPtToLonLatPtResult" type="tns:LonLatPt" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ConvertPlaceToLonLatPt">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="place" type="tns:Place" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="Place">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="City" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="State" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Country" type="s:string" />
</s:sequence>
</s:complexType>
<s:element name="ConvertPlaceToLonLatPtResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="ConvertPlaceToLonLatPtResult" type="tns:LonLatPt" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="CountPlacesInRect">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="upperleft" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="lowerright" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="ptype" type="tns:PlaceType" />
</s:sequence>
</s:complexType>
</s:element>
<s:simpleType name="PlaceType">
<s:restriction base="s:string">
<s:enumeration value="UnknownPlaceType" />
<s:enumeration value="AirRailStation" />
<s:enumeration value="BayGulf" />
<s:enumeration value="CapePeninsula" />
<s:enumeration value="CityTown" />
<s:enumeration value="HillMountain" />
<s:enumeration value="Island" />
<s:enumeration value="Lake" />
<s:enumeration value="OtherLandFeature" />
<s:enumeration value="OtherWaterFeature" />
<s:enumeration value="ParkBeach" />
<s:enumeration value="PointOfInterest" />
<s:enumeration value="River" />
</s:restriction>
</s:simpleType>
<s:element name="CountPlacesInRectResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="CountPlacesInRectResult" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetAreaFromPt">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="center" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="theme" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="scale" type="tns:Scale" />
<s:element minOccurs="1" maxOccurs="1" name="displayPixWidth" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="displayPixHeight" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
<s:simpleType name="Scale">
<s:restriction base="s:string">
<s:enumeration value="Scale1mm" />
<s:enumeration value="Scale2mm" />
<s:enumeration value="Scale4mm" />
<s:enumeration value="Scale8mm" />
<s:enumeration value="Scale16mm" />
<s:enumeration value="Scale32mm" />
<s:enumeration value="Scale63mm" />
<s:enumeration value="Scale125mm" />
<s:enumeration value="Scale250mm" />
<s:enumeration value="Scale500mm" />
<s:enumeration value="Scale1m" />
<s:enumeration value="Scale2m" />
<s:enumeration value="Scale4m" />
<s:enumeration value="Scale8m" />
<s:enumeration value="Scale16m" />
<s:enumeration value="Scale32m" />
<s:enumeration value="Scale64m" />
<s:enumeration value="Scale128m" />
<s:enumeration value="Scale256m" />
<s:enumeration value="Scale512m" />
<s:enumeration value="Scale1km" />
<s:enumeration value="Scale2km" />
<s:enumeration value="Scale4km" />
<s:enumeration value="Scale8km" />
<s:enumeration value="Scale16km" />
<s:enumeration value="Scale32km" />
<s:enumeration value="Scale64km" />
<s:enumeration value="Scale128km" />
<s:enumeration value="Scale256km" />
<s:enumeration value="Scale512km" />
<s:enumeration value="Scale1024km" />
<s:enumeration value="Scale2048km" />
</s:restriction>
</s:simpleType>
<s:element name="GetAreaFromPtResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GetAreaFromPtResult" type="tns:AreaBoundingBox" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="AreaBoundingBox">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="NorthWest" type="tns:AreaCoordinate" />
<s:element minOccurs="1" maxOccurs="1" name="NorthEast" type="tns:AreaCoordinate" />
<s:element minOccurs="1" maxOccurs="1" name="SouthWest" type="tns:AreaCoordinate" />
<s:element minOccurs="1" maxOccurs="1" name="SouthEast" type="tns:AreaCoordinate" />
<s:element minOccurs="1" maxOccurs="1" name="Center" type="tns:AreaCoordinate" />
<s:element minOccurs="0" maxOccurs="1" name="NearestPlace" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="OverlappingThemeInfos" type="tns:ArrayOfOverlappingThemeInfo" />
</s:sequence>
</s:complexType>
<s:complexType name="AreaCoordinate">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="TileMeta" type="tns:TileMeta" />
<s:element minOccurs="1" maxOccurs="1" name="Offset" type="tns:LonLatPtOffset" />
</s:sequence>
</s:complexType>
<s:complexType name="TileMeta">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="Id" type="tns:TileId" />
<s:element minOccurs="1" maxOccurs="1" name="TileExists" type="s:boolean" />
<s:element minOccurs="1" maxOccurs="1" name="NorthWest" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="NorthEast" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="SouthWest" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="SouthEast" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="Center" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="Capture" type="s:dateTime" />
</s:sequence>
</s:complexType>
<s:complexType name="TileId">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="Theme" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="Scale" type="tns:Scale" />
<s:element minOccurs="1" maxOccurs="1" name="Scene" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="X" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="Y" type="s:int" />
</s:sequence>
</s:complexType>
<s:complexType name="LonLatPtOffset">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="Point" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="XOffset" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="YOffset" type="s:int" />
</s:sequence>
</s:complexType>
<s:complexType name="ArrayOfOverlappingThemeInfo">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="OverlappingThemeInfo" type="tns:OverlappingThemeInfo" />
</s:sequence>
</s:complexType>
<s:complexType name="OverlappingThemeInfo">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="LocalTheme" type="s:boolean" />
<s:element minOccurs="1" maxOccurs="1" name="Theme" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="Point" type="tns:LonLatPt" />
<s:element minOccurs="0" maxOccurs="1" name="ThemeName" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="Capture" type="s:dateTime" />
<s:element minOccurs="1" maxOccurs="1" name="ProjectionId" type="tns:ProjectionType" />
<s:element minOccurs="1" maxOccurs="1" name="LoScale" type="tns:Scale" />
<s:element minOccurs="1" maxOccurs="1" name="HiScale" type="tns:Scale" />
<s:element minOccurs="0" maxOccurs="1" name="Url" type="s:string" />
</s:sequence>
</s:complexType>
<s:simpleType name="ProjectionType">
<s:restriction base="s:string">
<s:enumeration value="Geographic" />
<s:enumeration value="UtmNad27" />
<s:enumeration value="UtmNad83" />
</s:restriction>
</s:simpleType>
<s:element name="GetAreaFromRect">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="upperLeft" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="lowerRight" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="theme" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="scale" type="tns:Scale" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetAreaFromRectResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GetAreaFromRectResult" type="tns:AreaBoundingBox" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetAreaFromTileId">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="id" type="tns:TileId" />
<s:element minOccurs="1" maxOccurs="1" name="displayPixWidth" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="displayPixHeight" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetAreaFromTileIdResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GetAreaFromTileIdResult" type="tns:AreaBoundingBox" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetLatLonMetrics">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="point" type="tns:LonLatPt" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetLatLonMetricsResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetLatLonMetricsResult" type="tns:ArrayOfThemeBoundingBox" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ArrayOfThemeBoundingBox">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="ThemeBoundingBox" type="tns:ThemeBoundingBox" />
</s:sequence>
</s:complexType>
<s:complexType name="ThemeBoundingBox">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="Theme" type="s:int" />
<s:element minOccurs="0" maxOccurs="1" name="ThemeName" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="Sparseness" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="LoScale" type="tns:Scale" />
<s:element minOccurs="1" maxOccurs="1" name="HiScale" type="tns:Scale" />
<s:element minOccurs="1" maxOccurs="1" name="ProjectionId" type="tns:ProjectionType" />
<s:element minOccurs="0" maxOccurs="1" name="ProjectionName" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="WestLongitude" type="s:double" />
<s:element minOccurs="1" maxOccurs="1" name="NorthLatitude" type="s:double" />
<s:element minOccurs="1" maxOccurs="1" name="EastLongitude" type="s:double" />
<s:element minOccurs="1" maxOccurs="1" name="SouthLatitude" type="s:double" />
</s:sequence>
</s:complexType>
<s:element name="GetPlaceFacts">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="place" type="tns:Place" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetPlaceFactsResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GetPlaceFactsResult" type="tns:PlaceFacts" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="PlaceFacts">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="Place" type="tns:Place" />
<s:element minOccurs="1" maxOccurs="1" name="Center" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="AvailableThemeMask" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="PlaceTypeId" type="tns:PlaceType" />
<s:element minOccurs="1" maxOccurs="1" name="Population" type="s:int" />
</s:sequence>
</s:complexType>
<s:element name="GetPlaceList">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="placeName" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="MaxItems" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="imagePresence" type="s:boolean" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetPlaceListResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetPlaceListResult" type="tns:ArrayOfPlaceFacts" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ArrayOfPlaceFacts">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="PlaceFacts" type="tns:PlaceFacts" />
</s:sequence>
</s:complexType>
<s:element name="GetPlaceListInRect">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="upperleft" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="lowerright" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="ptype" type="tns:PlaceType" />
<s:element minOccurs="1" maxOccurs="1" name="MaxItems" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetPlaceListInRectResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetPlaceListInRectResult" type="tns:ArrayOfPlaceFacts" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetTheme">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="theme" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetThemeResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GetThemeResult" type="tns:ThemeInfo" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ThemeInfo">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="Theme" type="s:int" />
<s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Description" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Supplier" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="LoScale" type="tns:Scale" />
<s:element minOccurs="1" maxOccurs="1" name="HiScale" type="tns:Scale" />
<s:element minOccurs="1" maxOccurs="1" name="ProjectionId" type="tns:ProjectionType" />
<s:element minOccurs="0" maxOccurs="1" name="ProjectionName" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="CopyrightNotice" type="s:string" />
</s:sequence>
</s:complexType>
<s:element name="GetTileMetaFromLonLatPt">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="point" type="tns:LonLatPt" />
<s:element minOccurs="1" maxOccurs="1" name="theme" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="scale" type="tns:Scale" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetTileMetaFromLonLatPtResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GetTileMetaFromLonLatPtResult" type="tns:TileMeta" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetTileMetaFromTileId">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="id" type="tns:TileId" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetTileMetaFromTileIdResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="GetTileMetaFromTileIdResult" type="tns:TileMeta" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetTile">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="id" type="tns:TileId" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetTileResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetTileResult" type="s:base64Binary" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
<wsdl:message name="ConvertLonLatPtToNearestPlaceSoapIn">
<wsdl:part name="parameters" element="tns:ConvertLonLatPtToNearestPlace" />
</wsdl:message>
<wsdl:message name="ConvertLonLatPtToNearestPlaceSoapOut">
<wsdl:part name="parameters" element="tns:ConvertLonLatPtToNearestPlaceResponse" />
</wsdl:message>
<wsdl:message name="ConvertLonLatPtToUtmPtSoapIn">
<wsdl:part name="parameters" element="tns:ConvertLonLatPtToUtmPt" />
</wsdl:message>
<wsdl:message name="ConvertLonLatPtToUtmPtSoapOut">
<wsdl:part name="parameters" element="tns:ConvertLonLatPtToUtmPtResponse" />
</wsdl:message>
<wsdl:message name="ConvertUtmPtToLonLatPtSoapIn">
<wsdl:part name="parameters" element="tns:ConvertUtmPtToLonLatPt" />
</wsdl:message>
<wsdl:message name="ConvertUtmPtToLonLatPtSoapOut">
<wsdl:part name="parameters" element="tns:ConvertUtmPtToLonLatPtResponse" />
</wsdl:message>
<wsdl:message name="ConvertPlaceToLonLatPtSoapIn">
<wsdl:part name="parameters" element="tns:ConvertPlaceToLonLatPt" />
</wsdl:message>
<wsdl:message name="ConvertPlaceToLonLatPtSoapOut">
<wsdl:part name="parameters" element="tns:ConvertPlaceToLonLatPtResponse" />
</wsdl:message>
<wsdl:message name="CountPlacesInRectSoapIn">
<wsdl:part name="parameters" element="tns:CountPlacesInRect" />
</wsdl:message>
<wsdl:message name="CountPlacesInRectSoapOut">
<wsdl:part name="parameters" element="tns:CountPlacesInRectResponse" />
</wsdl:message>
<wsdl:message name="GetAreaFromPtSoapIn">
<wsdl:part name="parameters" element="tns:GetAreaFromPt" />
</wsdl:message>
<wsdl:message name="GetAreaFromPtSoapOut">
<wsdl:part name="parameters" element="tns:GetAreaFromPtResponse" />
</wsdl:message>
<wsdl:message name="GetAreaFromRectSoapIn">
<wsdl:part name="parameters" element="tns:GetAreaFromRect" />
</wsdl:message>
<wsdl:message name="GetAreaFromRectSoapOut">
<wsdl:part name="parameters" element="tns:GetAreaFromRectResponse" />
</wsdl:message>
<wsdl:message name="GetAreaFromTileIdSoapIn">
<wsdl:part name="parameters" element="tns:GetAreaFromTileId" />
</wsdl:message>
<wsdl:message name="GetAreaFromTileIdSoapOut">
<wsdl:part name="parameters" element="tns:GetAreaFromTileIdResponse" />
</wsdl:message>
<wsdl:message name="GetLatLonMetricsSoapIn">
<wsdl:part name="parameters" element="tns:GetLatLonMetrics" />
</wsdl:message>
<wsdl:message name="GetLatLonMetricsSoapOut">
<wsdl:part name="parameters" element="tns:GetLatLonMetricsResponse" />
</wsdl:message>
<wsdl:message name="GetPlaceFactsSoapIn">
<wsdl:part name="parameters" element="tns:GetPlaceFacts" />
</wsdl:message>
<wsdl:message name="GetPlaceFactsSoapOut">
<wsdl:part name="parameters" element="tns:GetPlaceFactsResponse" />
</wsdl:message>
<wsdl:message name="GetPlaceListSoapIn">
<wsdl:part name="parameters" element="tns:GetPlaceList" />
</wsdl:message>
<wsdl:message name="GetPlaceListSoapOut">
<wsdl:part name="parameters" element="tns:GetPlaceListResponse" />
</wsdl:message>
<wsdl:message name="GetPlaceListInRectSoapIn">
<wsdl:part name="parameters" element="tns:GetPlaceListInRect" />
</wsdl:message>
<wsdl:message name="GetPlaceListInRectSoapOut">
<wsdl:part name="parameters" element="tns:GetPlaceListInRectResponse" />
</wsdl:message>
<wsdl:message name="GetThemeSoapIn">
<wsdl:part name="parameters" element="tns:GetTheme" />
</wsdl:message>
<wsdl:message name="GetThemeSoapOut">
<wsdl:part name="parameters" element="tns:GetThemeResponse" />
</wsdl:message>
<wsdl:message name="GetTileMetaFromLonLatPtSoapIn">
<wsdl:part name="parameters" element="tns:GetTileMetaFromLonLatPt" />
</wsdl:message>
<wsdl:message name="GetTileMetaFromLonLatPtSoapOut">
<wsdl:part name="parameters" element="tns:GetTileMetaFromLonLatPtResponse" />
</wsdl:message>
<wsdl:message name="GetTileMetaFromTileIdSoapIn">
<wsdl:part name="parameters" element="tns:GetTileMetaFromTileId" />
</wsdl:message>
<wsdl:message name="GetTileMetaFromTileIdSoapOut">
<wsdl:part name="parameters" element="tns:GetTileMetaFromTileIdResponse" />
</wsdl:message>
<wsdl:message name="GetTileSoapIn">
<wsdl:part name="parameters" element="tns:GetTile" />
</wsdl:message>
<wsdl:message name="GetTileSoapOut">
<wsdl:part name="parameters" element="tns:GetTileResponse" />
</wsdl:message>
<wsdl:portType name="TerraServiceSoap">
<wsdl:operation name="ConvertLonLatPtToNearestPlace">
<wsdl:input message="tns:ConvertLonLatPtToNearestPlaceSoapIn" />
<wsdl:output message="tns:ConvertLonLatPtToNearestPlaceSoapOut" />
</wsdl:operation>
<wsdl:operation name="ConvertLonLatPtToUtmPt">
<wsdl:input message="tns:ConvertLonLatPtToUtmPtSoapIn" />
<wsdl:output message="tns:ConvertLonLatPtToUtmPtSoapOut" />
</wsdl:operation>
<wsdl:operation name="ConvertUtmPtToLonLatPt">
<wsdl:input message="tns:ConvertUtmPtToLonLatPtSoapIn" />
<wsdl:output message="tns:ConvertUtmPtToLonLatPtSoapOut" />
</wsdl:operation>
<wsdl:operation name="ConvertPlaceToLonLatPt">
<wsdl:input message="tns:ConvertPlaceToLonLatPtSoapIn" />
<wsdl:output message="tns:ConvertPlaceToLonLatPtSoapOut" />
</wsdl:operation>
<wsdl:operation name="CountPlacesInRect">
<wsdl:input message="tns:CountPlacesInRectSoapIn" />
<wsdl:output message="tns:CountPlacesInRectSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetAreaFromPt">
<wsdl:input message="tns:GetAreaFromPtSoapIn" />
<wsdl:output message="tns:GetAreaFromPtSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetAreaFromRect">
<wsdl:input message="tns:GetAreaFromRectSoapIn" />
<wsdl:output message="tns:GetAreaFromRectSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetAreaFromTileId">
<wsdl:input message="tns:GetAreaFromTileIdSoapIn" />
<wsdl:output message="tns:GetAreaFromTileIdSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetLatLonMetrics">
<wsdl:input message="tns:GetLatLonMetricsSoapIn" />
<wsdl:output message="tns:GetLatLonMetricsSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetPlaceFacts">
<wsdl:input message="tns:GetPlaceFactsSoapIn" />
<wsdl:output message="tns:GetPlaceFactsSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetPlaceList">
<wsdl:input message="tns:GetPlaceListSoapIn" />
<wsdl:output message="tns:GetPlaceListSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetPlaceListInRect">
<wsdl:input message="tns:GetPlaceListInRectSoapIn" />
<wsdl:output message="tns:GetPlaceListInRectSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetTheme">
<wsdl:input message="tns:GetThemeSoapIn" />
<wsdl:output message="tns:GetThemeSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetTileMetaFromLonLatPt">
<wsdl:input message="tns:GetTileMetaFromLonLatPtSoapIn" />
<wsdl:output message="tns:GetTileMetaFromLonLatPtSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetTileMetaFromTileId">
<wsdl:input message="tns:GetTileMetaFromTileIdSoapIn" />
<wsdl:output message="tns:GetTileMetaFromTileIdSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetTile">
<wsdl:input message="tns:GetTileSoapIn" />
<wsdl:output message="tns:GetTileSoapOut" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="TerraServiceSoap" type="tns:TerraServiceSoap">
<soap:binding transport="https://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="ConvertLonLatPtToNearestPlace">
<soap:operation soapAction="https://terraservice-usa.com/ConvertLonLatPtToNearestPlace" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ConvertLonLatPtToUtmPt">
<soap:operation soapAction="https://terraservice-usa.com/ConvertLonLatPtToUtmPt" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ConvertUtmPtToLonLatPt">
<soap:operation soapAction="https://terraservice-usa.com/ConvertUtmPtToLonLatPt" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ConvertPlaceToLonLatPt">
<soap:operation soapAction="https://terraservice-usa.com/ConvertPlaceToLonLatPt" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CountPlacesInRect">
<soap:operation soapAction="https://terraservice-usa.com/CountPlacesInRect" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAreaFromPt">
<soap:operation soapAction="https://terraservice-usa.com/GetAreaFromPt" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAreaFromRect">
<soap:operation soapAction="https://terraservice-usa.com/GetAreaFromRect" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAreaFromTileId">
<soap:operation soapAction="https://terraservice-usa.com/GetAreaFromTileId" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetLatLonMetrics">
<soap:operation soapAction="https://terraservice-usa.com/GetLatLonMetrics" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetPlaceFacts">
<soap:operation soapAction="https://terraservice-usa.com/GetPlaceFacts" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetPlaceList">
<soap:operation soapAction="https://terraservice-usa.com/GetPlaceList" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetPlaceListInRect">
<soap:operation soapAction="https://terraservice-usa.com/GetPlaceListInRect" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetTheme">
<soap:operation soapAction="https://terraservice-usa.com/GetTheme" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetTileMetaFromLonLatPt">
<soap:operation soapAction="https://terraservice-usa.com/GetTileMetaFromLonLatPt" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetTileMetaFromTileId">
<soap:operation soapAction="https://terraservice-usa.com/GetTileMetaFromTileId" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetTile">
<soap:operation soapAction="https://terraservice-usa.com/GetTile" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="TerraService">
<documentation xmlns="https://schemas.xmlsoap.org/wsdl/">TerraServer Web Service</documentation>
<wsdl:port name="TerraServiceSoap" binding="tns:TerraServiceSoap">
<soap:address location="https://terraservice.net/TerraService2.asmx" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Tematy pokrewne