2009-06-05 44 views
2

我試圖使用虛擬地球Web服務:如何將多個航點發送到虛擬地球路由Web服務

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

返回由已經停在車輛取得的總行程距離幾點。

我的代碼工作正常的行程與4個航點,但還有比我得到以下錯誤更多:

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.

粗糙的代碼是:(C#控制檯應用程序)

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); 
    } 

} 

}

我不知道在哪裏設置MaxReceivedMessageSize加上我讀過它只能在Vista上工作?!

幫助任何人?

回答

1

我發現這裏的解決方案: link text

的maxReceivedMessgeSize是在應用程序的config文件,即web.config文件或app.config中等等

0

你這樣做的app.config在WPF和web.config在ASP

訣竅在於,maxBufferSize也必須等於maxReceivedMessageSize

The max for RouteService is 9000000。我測試了這一點,並能夠獲得世界各地的方向列表。

<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">