2009-06-05 8 views
2

Ich versuche zu verwenden, um den virtuellen Erde Web-Service senden: von einem Fahrzeug ausWie mehrere Wegpunkte auf einen virtuelle Erde Routing-Web-Service

http://staging.dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc?wsdl

zurückzukehren, um die Gesamtfahrtstrecke, die bei Stillstand gekommen ist Mehrere Punkte.

Mein Code arbeitet für Fahrten mit 4 Wegpunkte in Ordnung, aber nichts mehr, als dass ich die folgende Fehlermeldung erhalten:

The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.

der grobe Code ist: (C# Konsolenanwendung)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Xml; 
using System.Text; 
using System.Configuration; 
using System.Threading; 
using System.Text.RegularExpressions; 
using altRouteFinder.VEStagingToken; 
using altRouteFinder.VERoutingService; 

namespace altRouteFinder 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     waypointString = "53.450356,-2.873335;53.399184,-2.980577;53.440535,-2.864101;53.449368,-2.885361;53.454417,-2.930646;53.450356,-2.873335"; 

     string[] points = waypointString.Split(';'); 
     Waypoint[] waypoints = new Waypoint[points.Length]; 
     double dayDistance = 0; 
     int pointIndex = -1; 
     foreach (string point in points) 
     { 
      pointIndex++; 
      waypoints[pointIndex] = new Waypoint(); 
      string[] digits = point.Split(','); 
      waypoints[pointIndex].Location = new VERoutingService.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; 

     RouteOptions myRouteOptions = new RouteOptions(); 
     //Set travel mode - Driving or Walking 
     myRouteOptions.Mode = TravelMode.Driving; 
     //Set the optimization type - MinimizeDistance or MinimizeTime 
     myRouteOptions.Optimization = RouteOptimization.MinimizeTime; 
     //Set the use of traffic conditions - TrafficBasedRouteAndTime, TrafficBasedTime, or None 
     myRouteOptions.TrafficUsage = TrafficUsage.TrafficBasedTime; 
     //Pass the Route Options to the Route Object 
     routeRequest.Options = myRouteOptions; 

     // Make the calculate route request 
     RouteServiceClient routeService = new RouteServiceClient(); 

     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} {2}\n", 
         instructionCount, item.Summary.Distance, item.Text)); 
        dayDistance += item.Summary.Distance; 
       } 
      } 
      //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"; 

     Console.WriteLine(results); 
     Console.WriteLine(dayDistance); 
    } 

} 

}

Ich weiß nicht, wo ich die MaxReceivedMessageSize einstellen muss und ich habe gelesen, dass es nur auf Vista funktioniert ?!

Helfen Sie jemandem?

Antwort

1

ich die Lösung hier gefunden: link text

Die maxReceivedMessgeSize in der .config-Datei der App ist, dh web.config oder app.config usw.

0

Sie tun dies in der app.config in WPF und web.config in asp

Der Trick ist, maxBufferSize muss auch gleich maxReceivedMessageSize

The max for RouteService is 9000000. Ich habe das getestet und konnte eine Liste mit Wegbeschreibungen auf der ganzen Welt bekommen.

<binding name="BasicHttpBinding_IRouteService" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true">