Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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
非常混乱的Silverlight、Amazon S3和clientaccesspolicy.xml问题_Silverlight_Amazon S3_Clientaccesspolicy.xml - Fatal编程技术网

非常混乱的Silverlight、Amazon S3和clientaccesspolicy.xml问题

非常混乱的Silverlight、Amazon S3和clientaccesspolicy.xml问题,silverlight,amazon-s3,clientaccesspolicy.xml,Silverlight,Amazon S3,Clientaccesspolicy.xml,这是一个奇怪的问题 我正在使用AmazonS3在Silverlight4应用程序中存储文件。由于与RESTAPI和S3文件相关的文件限制,REST文件必须小于1mb,因此我正在尝试让SOAP调用正常工作 我在这里遵循了Tim编写的教程 减去CNAME的部分,因为他更新了CNAME并说这样做不利于安全, 但一直存在连接问题,直到今天早上它神奇地开始工作,我才能够得到我所有水桶的列表!所以我认为它是固定的,直到几分钟前,当我重新启动Chrome,然后再次尝试应用程序时,它不再连接到SOAP端点,VS

这是一个奇怪的问题

我正在使用AmazonS3在Silverlight4应用程序中存储文件。由于与RESTAPI和S3文件相关的文件限制,REST文件必须小于1mb,因此我正在尝试让SOAP调用正常工作

我在这里遵循了Tim编写的教程

减去CNAME的部分,因为他更新了CNAME并说这样做不利于安全, 但一直存在连接问题,直到今天早上它神奇地开始工作,我才能够得到我所有水桶的列表!所以我认为它是固定的,直到几分钟前,当我重新启动Chrome,然后再次尝试应用程序时,它不再连接到SOAP端点,VS给了我跨域错误

然而,我想到了我之前为让它工作所做的所有事情,我唯一能想到的是我打开了一个选项卡,其中clientaccesspolicy.xml文件通过bucket.s3.amazonaws.com/clientaccesspolicy.xml打开。因此,我尝试在一个新选项卡中再次打开它,在另一个选项卡中打开我的应用程序,然后SOAP调用开始工作!只有在选项卡中打开文件时,它才起作用!!!我也在Firefox和IE上试用过,同样的东西

我有一个Fiddler,它似乎从来没有真正调用clientaccesspolicy.xml,除非它隐藏在一个SSL调用中,然后就没有办法知道了,但是没有像其他一些问题所说的那样通过Fiddler直接调用.s3.amazonaws.com/clientaccesspolicy.xml

非常感谢大家的帮助,谢谢

编辑: 因为有人可能会要求它,所以这是我当前使用的clientaccesspolicy.xml文件。我知道这不是最安全的,只是在我取出通配符之前试着让它工作

<access-policy>
    <cross-domain-access>
       <policy>
         <allow-from http-methods="*" http-request-headers="*">
            <domain uri="http://*"/>
            <domain uri="https://*"/>
         </allow-from>
         <grant-to>
            <resource path="/" include-subpaths="true"/>
         </grant-to>
        </policy>
    </cross-domain-access>
 </access-policy>
编辑2:
这似乎是一个问题。如果我强制我的端点为http,而不是Amazon要求的https,Fiddle会显示SL访问clientaccesspolicy.xml文件

当您在另一个选项卡中打开clientaccesspolicy.xml文件时,我猜您正在传递一些允许您访问它的凭据。这将设置一个cookie,Silverlight也可以使用它访问clientaccesspolicy.xml文件。当你关闭浏览器时,你就失去了cookie,从而失去了对文件的访问权。

所以我找到了答案

第一个问题是,如果我打开它,为什么它会起作用,这不是因为cookie是按说设置的,而是通过https访问它让我接受了amazon的SSL安全策略

第二个问题,我不应该接受。amazon使用的SSL通配符*.s3.amazonaws.com与其中包含句点的存储桶不匹配。所以,当我遵循蒂姆的教程时,我把我所有的水桶都做成了这样

bucketname.domain.com

当我试图通过SOAP和后来的https访问它时,它不起作用,因为通配符不匹配。把我所有的水桶都改成不包含水桶,效果很好


还应该注意,Tim的教程不再有效,因为他正在使用http,今年6月,Amazon通过https强制进行SOAP调用,因此http调用不再有效。

我得到了这么多,但它并没有解决SL4无法访问clientaccesspolicy.xml文件的真正问题。我将添加一个编辑,如果我强制端点指向http而不是amazon要求的https,fiddler确实会显示它访问该文件,因此它似乎只是https问题。您在这里查看了答案吗?