Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook crossdomain.xml silverlight错误_Silverlight_Facebook_Cross Domain_Facebook C# Sdk - Fatal编程技术网

Facebook crossdomain.xml silverlight错误

Facebook crossdomain.xml silverlight错误,silverlight,facebook,cross-domain,facebook-c#-sdk,Silverlight,Facebook,Cross Domain,Facebook C# Sdk,我对位于Facebook照片服务器上的crossdomain.xml有问题。第一个问题出现在Silverlight请求clientaccesspolicy.xml时——Facebook服务器返回403——拒绝访问,这很好,因为它们的服务器上也部署了crossdomain.xml。Silverlight然后请求crossdomain.xml,它得到的响应正好是: <?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM

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

<?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 ports=“*”属性,那么一切都将按预期工作?有没有人知道如何克服这个问题,以前有没有人遇到过同样的问题,或者是我做错了什么

这在Silverlight 5中仍未解决。Facebook似乎也不担心。

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

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
事件处理程序中执行所需的任何操作

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

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

我希望有人会发现这一点很有用。

我可以在facebook上访问照片而不会出现问题,因此需要更多关于您到底在做什么的信息。我也可以访问facebook上的照片,但只是为了查看,但由于silverlight不允许跨域源上的位图编辑,因此问题就出现了。下面是一段可以用来重现此问题的代码:
public void DownloadPhoto(字符串uri){WebClient client=new WebClient();client.OpenReadAsync(new uri(uri));client.OpenReadCompleted+=new OpenReadCompletedEventHandler(client_OpenReadCompleted);}
我刚刚发现silverlight在hmm中不支持端口属性的一些信息,看起来是一个新问题。一个月前,我的facebook应用程序还在运行,然后我转换成了签名请求,但现在似乎坏了。确切地说,以前不是这样的。我创建了一个新的,虽然这不完全是facebook的错误。我使用了你的代码,它工作起来很有魅力。我想知道是否有可能获取图像的流,以便对图像进行编辑。知道为什么用户在尝试访问clientaccesspolicy.xml文件时会收到403状态响应吗?
GetProfilePhoto("mglace")
    .Subscribe(image => { /* Do something with the image in here*/  },
               error => { /* Handle any errors in here */ },
               () => { /* Finalization code goes here */ });