Hi All,
I have built a Bings Map program using the below link:
Developing a .NET Application Using Bing Maps SOAP Services
Now, this works perfectly at house but same throws the below error when I test it at my office:
[There was no endpoint listening at Service that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details./QUOTE]
In office proxy is used to connect to the internet whereas there is no proxy at my house.
Below is the my code:
Windows form code:
Code:
app.configC#:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Text.RegularExpressions; using BingMapsSampleTest.GeocodeService; using BingMapsSampleTest.SearchService; using BingMapsSampleTest.ImageryService; using BingMapsSampleTest.RouteService; namespace BingMapsSampleTest { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private String GeocodeAddress(string address) { string results = ""; string key = "AvAQo6JWlBdXloVK2dZVjrBKEebcm7gcug-yzqT7WZXQAWQCNf9WhgKLTCusPyvp"; GeocodeRequest geocodeRequest = new GeocodeRequest(); // Set the credentials using a valid Bing Maps key geocodeRequest.Credentials = new GeocodeService.Credentials(); geocodeRequest.Credentials.ApplicationId = key; // Set the full address query geocodeRequest.Query = address; // Set the options to only return high confidence results ConfidenceFilter[] filters = new ConfidenceFilter[1]; filters[0] = new ConfidenceFilter(); filters[0].MinimumConfidence = GeocodeService.Confidence.High; // Add the filters to the options GeocodeOptions geocodeOptions = new GeocodeOptions(); geocodeOptions.Filters = filters; geocodeRequest.Options = geocodeOptions; // Make the geocode request GeocodeServiceClient geocodeService = new GeocodeServiceClient("BasicHttpBinding_IGeocodeService"); //GeocodeResponse geocodeResponse = geocodeService.Geocode(geocodeRequest); //try //{ GeocodeResponse geocodeResponse = geocodeService.Geocode(geocodeRequest); // if (geocodeResponse.Results.Length > 0) // results = String.Format("Latitude: {0}\nLongitude: {1}", // geocodeResponse.Results[0].Locations[0].Latitude, // geocodeResponse.Results[0].Locations[0].Longitude); // else // results = "No Results Found"; // return results; //} //catch(Exception Ex) //{ // Console.WriteLine(Ex.InnerException); //} if (geocodeResponse.Results.Length > 0) results = String.Format("Latitude: {0}\nLongitude: {1}", geocodeResponse.Results[0].Locations[0].Latitude, geocodeResponse.Results[0].Locations[0].Longitude); else results = "No Results Found"; return results; } private void btnGeoCode_Click(object sender, RoutedEventArgs e) { labelResults.Content = GeocodeAddress(textInput.Text); } private string ReverseGeocodePoint(string locationString) { string results = ""; string key = "AvAQo6JWlBdXloVK2dZVjrBKEebcm7gcug-yzqT7WZXQAWQCNf9WhgKLTCusPyvp"; ReverseGeocodeRequest reverseGeocodeRequest = new ReverseGeocodeRequest(); // Set the credentials using a valid Bing Maps key reverseGeocodeRequest.Credentials = new GeocodeService.Credentials(); reverseGeocodeRequest.Credentials.ApplicationId = key; // Set the point to use to find a matching address GeocodeService.Location point = new GeocodeService.Location(); string[] digits = locationString.Split(','); point.Latitude = double.Parse(digits[0].Trim()); point.Longitude = double.Parse(digits[1].Trim()); reverseGeocodeRequest.Location = point; // Make the reverse geocode request GeocodeServiceClient geocodeService = new GeocodeServiceClient("BasicHttpBinding_IGeocodeService"); GeocodeResponse geocodeResponse = geocodeService.ReverseGeocode(reverseGeocodeRequest); if (geocodeResponse.Results.Length > 0) results = geocodeResponse.Results[0].DisplayName; else results = "No Results found"; return results; } private void btnReverseGeocode_Click(object sender, RoutedEventArgs e) { labelResults.Content = ReverseGeocodePoint(textInput.Text); } private string SearchKeywordLocation(string keywordLocation) { String results = ""; String key = "AvAQo6JWlBdXloVK2dZVjrBKEebcm7gcug-yzqT7WZXQAWQCNf9WhgKLTCusPyvp"; SearchRequest searchRequest = new SearchRequest(); // Set the credentials using a valid Bing Maps key searchRequest.Credentials = new SearchService.Credentials(); searchRequest.Credentials.ApplicationId = key; //Create the search query StructuredSearchQuery ssQuery = new StructuredSearchQuery(); string[] parts = keywordLocation.Split(';'); ssQuery.Keyword = parts[0]; ssQuery.Location = parts[1]; searchRequest.StructuredQuery = ssQuery; //Define options on the search searchRequest.SearchOptions = new SearchOptions(); searchRequest.SearchOptions.Filters = new FilterExpression() { PropertyId = 3, CompareOperator = CompareOperator.GreaterThanOrEquals, FilterValue = 8.16 }; //Make the search request SearchServiceClient searchService = new SearchServiceClient("BasicHttpBinding_ISearchService"); SearchResponse searchResponse = searchService.Search(searchRequest); //Parse and format results if (searchResponse.ResultSets[0].Results.Length > 0) { StringBuilder resultList = new StringBuilder(""); for (int i = 0; i < searchResponse.ResultSets[0].Results.Length; i++) { resultList.Append(String.Format("{0}. {1}\n", i + 1, searchResponse.ResultSets[0].Results[i].Name)); } results = resultList.ToString(); } else results = "No results found"; return results; } private void btnSearch_Click(object sender, RoutedEventArgs e) { labelResults.Content = SearchKeywordLocation(textInput.Text); } private string GetImagery(string locationString) { string key = "AvAQo6JWlBdXloVK2dZVjrBKEebcm7gcug-yzqT7WZXQAWQCNf9WhgKLTCusPyvp"; MapUriRequest mapUriRequest = new MapUriRequest(); // Set credentials using a valid Bing Maps key mapUriRequest.Credentials = new ImageryService.Credentials(); mapUriRequest.Credentials.ApplicationId = key; // Set the location of the requested image mapUriRequest.Center = new ImageryService.Location(); string[] digits = locationString.Split(','); mapUriRequest.Center.Latitude = double.Parse(digits[0].Trim()); mapUriRequest.Center.Longitude = double.Parse(digits[1].Trim()); // Set the map style and zoom level MapUriOptions mapUriOptions = new MapUriOptions(); mapUriOptions.Style = MapStyle.AerialWithLabels; mapUriOptions.ZoomLevel = 17; // Set the size of the requested image in pixels mapUriOptions.ImageSize = new ImageryService.SizeOfint(); mapUriOptions.ImageSize.Height = 200; mapUriOptions.ImageSize.Width = 300; mapUriRequest.Options = mapUriOptions; //Make the request and return the URI ImageryServiceClient imageryService = new ImageryServiceClient("BasicHttpBinding_IImageryService"); MapUriResponse mapUriResponse = imageryService.GetMapUri(mapUriRequest); return mapUriResponse.Uri; } private void btnRequestImage_Click(object sender, RoutedEventArgs e) { // Make label hidden and image visible labelResults.Visibility = Visibility.Hidden; imageResults.Visibility = Visibility.Visible; //Get URI and set image String imageURI = GetImagery(textInput.Text); imageResults.Source = new BitmapImage(new Uri(imageURI)); } private string RequestImageMetadata(string locationString) { string results = ""; string key = "AvAQo6JWlBdXloVK2dZVjrBKEebcm7gcug-yzqT7WZXQAWQCNf9WhgKLTCusPyvp"; ImageryMetadataRequest metadataRequest = new ImageryMetadataRequest(); // Set credentials using a valid Bing Maps key metadataRequest.Credentials = new ImageryService.Credentials(); metadataRequest.Credentials.ApplicationId = key; // Set the imagery metadata request options ImageryService.Location centerLocation = new ImageryService.Location(); string[] digits = locationString.Split(','); centerLocation.Latitude = double.Parse(digits[0].Trim()); centerLocation.Longitude = double.Parse(digits[1].Trim()); metadataRequest.Options = new ImageryMetadataOptions(); metadataRequest.Options.Location = centerLocation; metadataRequest.Options.ZoomLevel = 10; metadataRequest.Style = MapStyle.AerialWithLabels; // Make the imagery metadata request ImageryServiceClient imageryService = new ImageryServiceClient("BasicHttpBinding_IImageryService"); ImageryMetadataResponse metadataResponse = imageryService.GetImageryMetadata(metadataRequest); ImageryMetadataResult result = metadataResponse.Results[0]; if (metadataResponse.Results.Length > 0) results = String.Format("Uri: {0}\nVintage: {1} to {2}\nZoom Levels: {3} to {4}", result.ImageUri, result.Vintage.From.ToString(), result.Vintage.To.ToString(), result.ZoomRange.From.ToString(), result.ZoomRange.To.ToString()); else results = "Metadata is not available"; return results; } private void btnRequestMetadata_Click(object sender, RoutedEventArgs e) { labelResults.Content = RequestImageMetadata(textInput.Text); } private string CreateRoute(string waypointString) { string results = ""; string key = "AvAQo6JWlBdXloVK2dZVjrBKEebcm7gcug-yzqT7WZXQAWQCNf9WhgKLTCusPyvp"; RouteRequest routeRequest = new RouteRequest(); // Set the credentials using a valid Bing Maps key routeRequest.Credentials = new RouteService.Credentials(); routeRequest.Credentials.ApplicationId = key; //Parse user data to create array of waypoints string[] points = waypointString.Split(';'); Waypoint[] waypoints = new Waypoint[points.Length]; int pointIndex = -1; foreach (string point in points) { pointIndex++; waypoints[pointIndex] = new Waypoint(); string[] digits = point.Split(','); waypoints[pointIndex].Location = new RouteService.Location(); waypoints[pointIndex].Location.Latitude = double.Parse(digits[0].Trim()); waypoints[pointIndex].Location.Longitude = double.Parse(digits[1].Trim()); if (pointIndex == 0) waypoints[pointIndex].Description = "Start"; else if (pointIndex == points.Length) waypoints[pointIndex].Description = "End"; else waypoints[pointIndex].Description = string.Format("Stop #{0}", pointIndex); } routeRequest.Waypoints = waypoints; // Make the calculate route request RouteServiceClient routeService = new RouteServiceClient("BasicHttpBinding_IRouteService"); RouteResponse routeResponse = routeService.CalculateRoute(routeRequest); // Iterate through each itinerary item to get the route directions StringBuilder directions = new StringBuilder(""); if (routeResponse.Result.Legs.Length > 0) { int instructionCount = 0; int legCount = 0; foreach (RouteLeg leg in routeResponse.Result.Legs) { legCount++; directions.Append(string.Format("Leg #{0}\n", legCount)); foreach (ItineraryItem item in leg.Itinerary) { instructionCount++; directions.Append(string.Format("{0}. {1}\n", instructionCount, item.Text)); } } //Remove all Bing Maps tags around keywords. //If you wanted to format the results, you could use the tags Regex regex = new Regex("<[/a-zA-Z:]*>", RegexOptions.IgnoreCase | RegexOptions.Multiline); results = regex.Replace(directions.ToString(), string.Empty); } else results = "No Route found"; return results; } private void btnRoute_Click(object sender, RoutedEventArgs e) { labelResults.Content = CreateRoute(textInput.Text); } private string CreateMajorRoutes(string locationString) { string results = ""; string key = "AvAQo6JWlBdXloVK2dZVjrBKEebcm7gcug-yzqT7WZXQAWQCNf9WhgKLTCusPyvp"; MajorRoutesRequest majorRoutesRequest = new MajorRoutesRequest(); // Set the credentials using a valid Bing Maps key majorRoutesRequest.Credentials = new RouteService.Credentials(); majorRoutesRequest.Credentials.ApplicationId = key; // Set the destination of the routes from major roads Waypoint endPoint = new Waypoint(); endPoint.Location = new RouteService.Location(); string[] digits = locationString.Split(','); endPoint.Location.Latitude = double.Parse(digits[0].Trim()); endPoint.Location.Longitude = double.Parse(digits[1].Trim()); endPoint.Description = "Location"; // Set the option to return full routes with directions MajorRoutesOptions options = new MajorRoutesOptions(); options.ReturnRoutes = true; majorRoutesRequest.Destination = endPoint; majorRoutesRequest.Options = options; // Make the route-from-major-roads request RouteServiceClient routeService = new RouteServiceClient("BasicHttpBinding_IRouteService"); // The result is an MajorRoutesResponse Object MajorRoutesResponse majorRoutesResponse = routeService.CalculateRoutesFromMajorRoads(majorRoutesRequest); Regex regex = new Regex("<[/a-zA-Z:]*>", RegexOptions.IgnoreCase | RegexOptions.Multiline); if (majorRoutesResponse.StartingPoints.Length > 0) { StringBuilder directions = new StringBuilder(); for (int i = 0; i < majorRoutesResponse.StartingPoints.Length; i++) { directions.Append(String.Format("Coming from {1}\n", i + 1, majorRoutesResponse.StartingPoints[i].Description)); for (int j = 0; j < majorRoutesResponse.Routes[i].Legs[0].Itinerary.Length; j++) { //Strip tags string step = regex.Replace( majorRoutesResponse.Routes[i].Legs[0].Itinerary[j].Text, string.Empty); directions.Append(String.Format(" {0}. {1}\n", j + 1, step)); } } results = directions.ToString(); } else results = "No Routes found"; return results; } private void btnMajorRoutes_Click(object sender, RoutedEventArgs e) { labelResults.Content = CreateMajorRoutes(textInput.Text); } } }
Code:
C#:<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_IGeocodeService" /> <binding name="BasicHttpBinding_ISearchService" /> <binding name="BasicHttpBinding_IImageryService" /> <binding name="BasicHttpBinding_IRouteService" /> </basicHttpBinding> <customBinding> <binding name="CustomBinding_IGeocodeService"> <binaryMessageEncoding /> <httpTransport /> </binding> <binding name="CustomBinding_ISearchService"> <textMessageEncoding messageVersion="Soap12" /> <httpTransport /> </binding> <binding name="CustomBinding_IImageryService"> <binaryMessageEncoding /> <httpTransport /> </binding> <binding name="CustomBinding_IRouteService"> <binaryMessageEncoding /> <httpTransport /> </binding> </customBinding> </bindings> <client> <endpoint address="[URL="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc"]Service[/URL]" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IGeocodeService" contract="GeocodeService.IGeocodeService" name="BasicHttpBinding_IGeocodeService" /> <endpoint address="[URL="http://dev.virtualearth.net/webservices/v1/searchservice/searchservice.svc"]Service[/URL]" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISearchService" contract="SearchService.ISearchService" name="BasicHttpBinding_ISearchService" /> <endpoint address="[URL="http://dev.virtualearth.net/webservices/v1/imageryservice/imageryservice.svc"]Service[/URL]" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IImageryService" contract="ImageryService.IImageryService" name="BasicHttpBinding_IImageryService" /> <endpoint address="[URL="http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc"]Service[/URL]" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IRouteService" contract="RouteService.IRouteService" name="BasicHttpBinding_IRouteService" /> </client> </system.serviceModel> <!--<httpTransport manualAddressing="false" maxBufferPoolSize="524288" maxMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous" bypassProxyOnLocal="true" hostNameComparisonMode="StrongWildcard" mapAddressingHeadersToHttpHeaders="true" proxyAuthenticationScheme="Anonymous" realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" useDefaultWebProxy="true" />--> <!--<system.net> <defaultProxy useDefaultCredentials="true"/> </system.net>--> </configuration>
I get the above error on the below line of code & similar line across.
Code:
C#:[FONT=Courier New]GeocodeResponse geocodeResponse = geocodeService.Geocode(geocodeRequest)[/FONT]
Now, solution is to provide proper proxy info.
I tried two code in app.config.
First one.
Code:
C#:[FONT=Courier New]<system.net> <defaultProxy useDefaultCredentials="true"/> </system.net>[/FONT]
With this code error remains same.
Second code in app.config is:
Code:
C#:<httpTransport manualAddressing="false" maxBufferPoolSize="524288" maxMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous" bypassProxyOnLocal="true" hostNameComparisonMode="StrongWildcard" mapAddressingHeadersToHttpHeaders="true" proxyAuthenticationScheme="Anonymous" realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" useDefaultWebProxy="true" />
Here I get a different error, this is -
The type initializer for 'System.ServiceModel.Diagnostics.TraceUtility' threw an exception
Please guide on how to pass proper proxy info in app.config file.
Regards
Sudhir