首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Facebook crossdomain.xml银光错误

Facebook crossdomain.xml银光错误
EN

Stack Overflow用户
提问于 2011-07-25 14:58:56
回答 2查看 917关注 0票数 9

我对位于Facebook照片服务器上的crossdomain.xml有一个问题。当Silverlight请求clientaccesspolicy.xml时,第一个问题出现了-- Facebook服务器返回403,访问被拒绝,这很好,因为它们还在服务器上部署了crossdomain.xml。Silverlight然后请求这个crossdomain.xml,它得到的响应就是这样的:

代码语言:javascript
复制
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain- policy.dtd">
<cross-domain-policy>
    <allow-access-from domain="*" secure="false" to-ports="*" />
    <site-control permitted-cross-domain-policies="master-only" />
</cross-domain-policy>

然后我玩了一会儿,把那个crossdomain.xml部署到我自己的服务器上,得到了同样的结果--一个安全异常。然后,我开始移动东西,并得出结论,如果只移除 to -port=“*”属性,那么一切都将按需要工作。有没有人知道如何克服这个问题,有没有人曾经遇到过同样的问题,或者是我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-19 23:46:11

我在尝试以编程方式从Facebook检索图像时遇到了同样的问题。奇怪的是,如果将Silverlight图像控件指向Facebook图像url,则图像将被检索和显示,而不会出现错误。这让我思考,我已经想出了一个可行的解决办法,似乎对我的情况一贯有效。我希望你也觉得有用。

代码语言:javascript
复制
var uri = new Uri("http://graph.facebook.com/mglace/picture/", UriKind.Absolute);
var bmp = new BitmapImage();

bmp.ImageOpened += (sender, e) => { /* Do something here with the sender (which is the BitmapImage) */ };
bmp.CreateOptions = BitmapCreateOptions.None;
bmp.UriSource = uri;

创建一个BitmapImage对象,为ImageOpened事件设置一个事件处理程序,并将CreateOptions属性设置为BitmapCreateOptions.None。最后,将UriSource设置为要检索的Facebook映像。图像将立即下载,因为我们将CreateOptions设置为None (默认值为DelayedCreation)。然后,您可以在ImageOpened事件处理程序中执行任何您想要的操作。

我希望将这个逻辑封装在我的服务层中,并加强错误处理等等,因此我将其封装在一个可以观察到的反应性扩展中,以使其更易于使用。下面是我最后的代码片段:

代码语言:javascript
复制
public IObservable<BitmapImage> GetProfilePhoto(string profileId)
{
    return Observable.Create<BitmapImage>(
        observer =>
            {
                // This handler handles a successful fetch
                EventHandler<RoutedEventArgs> openedHandler =
                    (sender, args) =>
                        {
                            try
                            {
                                observer.OnNext(sender as BitmapImage);
                                observer.OnCompleted();
                            }
                            catch (Exception ex)
                            {
                                observer.OnError(ex);
                            }
                        };

                // This handler handle a failure
                EventHandler<ExceptionRoutedEventArgs> failedHandler =
                    (sender, args) => observer.OnError(args.ErrorException);

                var url = string.Format("http://graph.facebook.com/{0}/picture/", profileId);
                var uri = new Uri(url, UriKind.Absolute);

                BitmapImage bmp = null;

                try
                {

                    Deployment.Current.Dispatcher.BeginInvoke(
                        () =>
                            {
                                bmp = new BitmapImage();

                                bmp.ImageOpened += openedHandler;
                                bmp.ImageFailed += failedHandler;

                                bmp.CreateOptions = BitmapCreateOptions.None;
                                bmp.UriSource = uri;
                            });
                }
                catch (Exception ex)
                {
                    observer.OnError(ex);
                }

                return () =>
                            {
                                // Cleanup the event handlers
                                if (bmp != null)
                                {
                                    bmp.ImageOpened -= openedHandler;
                                    bmp.ImageFailed -= failedHandler;
                                }
                            };
            });
}

和用法:

代码语言:javascript
复制
GetProfilePhoto("mglace")
    .Subscribe(image => { /* Do something with the image in here*/  },
               error => { /* Handle any errors in here */ },
               () => { /* Finalization code goes here */ });

我希望外面的人能找到有用的东西。

票数 2
EN

Stack Overflow用户

发布于 2011-12-12 09:43:31

这一点在Silverlight 5中还没有解决,Facebook似乎也不担心。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6818078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档