1

我正在使用 Google 的 GeoCode API 返回用户在搜索框中输入的地址的纬度/经度值。我的代码似乎是正确的,但我遇到了安全异常问题。当我使用 Fiddler 检查呼叫时,我可以看到正在发送呼叫,但是 clientaccesspolicy.xml 存在问题。

似乎我的 WPF 应用程序要求 Google 拥有 clientaccesspolicy.xml,但 Google 没有。所以我可能需要代理来调用谷歌的 API。有什么想法或解决方法吗?

代码

private void RequestResponseHandler(IAsyncResult asyncResult)
{
    HttpWebResponse response = null;
    Stream responseStream = null;
    try
    {
        response = (HttpWebResponse)request.EndGetResponse(asyncResult);
        responseStream = response.GetResponseStream();
        var xdoc = XDocument.Load(responseStream);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

提琴手 在此处输入图像描述 在此处输入图像描述

4

1 回答 1

1

据我了解,您在 Silverlight 应用程序中使用此代码,该应用程序对跨域请求非常挑剔。在执行任何请求之前,Silverlight 运行时会尝试clientaccesspolicy.xml在目标服务器上查找(在您的情况下为 maps.googleapis.com),如果失败,它会尝试查找crossdomain.xml. 显然,服务器没有这样的文件,因此运行时会抛出 SecurityException。

作为一种解决方法,您可以将请求代理到 Google Maps API:

  • 您的 Silverlight 应用程序向托管该应用程序(以及相应的 clienataccesspolicy.xml)的服务器发送请求
  • 您的网络服务器接受请求并将其重新发送到 Google API,然后将 API 的响应返回给您的应用程序。
于 2017-01-07T01:57:06.570 回答