1

C# を使用して Web サービスで Google Map API XML を呼び出して、出発地と目的地の間の方向の詳細を取得しようとしています。以下の関数をローカルで呼び出そうとすると、正常に動作します。しかし、コードをサーバーにデプロイすると、場所によっては方向の詳細が表示されません。私が試したローカル システムは Win2K8 R2 で、Web サーバーは Win2K3 です。これが私のコードです

 public List<DirectionSteps> getDistance(string sourceLat, string sourceLong, string destLat, string destLong)
    {
    var requestUrl = String.Format("http://maps.google.com/maps/api/directions/xml?origin=" + sourceLat + "," + sourceLong + "&destination=" + destLat + "," + destLong + "&sensor=false&units=metric");
    try
    {
        var client = new WebClient();
        var result = client.DownloadString(requestUrl);
        //return ParseDirectionResults(result);
        var directionStepsList = new List<DirectionSteps>();
        var xmlDoc = new System.Xml.XmlDocument { InnerXml = result };
        if (xmlDoc.HasChildNodes)
        {
            var directionsResponseNode = xmlDoc.SelectSingleNode("DirectionsResponse");
            if (directionsResponseNode != null)
            {
                var statusNode = directionsResponseNode.SelectSingleNode("status");
                if (statusNode != null && statusNode.InnerText.Equals("OK"))
                {
                    var legs = directionsResponseNode.SelectNodes("route/leg");

                    foreach (System.Xml.XmlNode leg in legs)
                    {
                        //int stepCount = 1;
                        var stepNodes = leg.SelectNodes("step");
                        var steps = new List<DirectionStep>();

                        foreach (System.Xml.XmlNode stepNode in stepNodes)
                        {
                            var directionStep = new DirectionStep();
                            directionStep.Index = stepCount++;
                            directionStep.Distance = stepNode.SelectSingleNode("distance/text").InnerText;
                            directionStep.Duration = stepNode.SelectSingleNode("duration/text").InnerText;

                            directionStep.Description = Regex.Replace(stepNode.SelectSingleNode("html_instructions").InnerText, "<[^<]+?>", "");
                            steps.Add(directionStep);
                        }

                        var directionSteps = new DirectionSteps();
                        //directionSteps.OriginAddress = leg.SelectSingleNode("start_address").InnerText;
                        //directionSteps.DestinationAddress = leg.SelectSingleNode("end_address").InnerText;
                        directionSteps.TotalDistance = leg.SelectSingleNode("distance/text").InnerText;
                        directionSteps.TotalDuration = leg.SelectSingleNode("duration/text").InnerText;
                        directionSteps.Steps = steps;
                        directionStepsList.Add(directionSteps);
                    }
                }
            }
        }
        return directionStepsList;
    }
    catch (Exception ex)
    {
        throw ex; 
    }

    }
4

2 に答える 2

0

多くの投稿とGoogleの使用ポリシーを読んだ後、GoogleはFQDNまたはパブリックサーバーからのそのような自動クエリを許可していないことがわかりました. 私は約10回のリクエストの後にブロックされた約15〜20回の方向リクエストを行っていました. ロジックを変更し、同じ機能をモバイル デバイスに実装し、モバイルから Google マップの方向 API を呼び出したところ、完全に機能しました !! モバイル デバイスから送信された場合、Google はそのようなリクエストをブロックしていないようです。しかし、いつ元に戻すかはわかりません。

于 2013-06-05T05:24:37.090 に答える