0

緑色の四角形を表示する Silverlight xap があります。

この xap は、Azure クラウドの ASP.NET Web サイトの一部です。

Xap のアップグレードを容易にするために、Xap を blob として Cloud Storage に移動し、https URL で参照しています。

Xap が起動しなくなりました。エラーメッセージは表示されません。xap があるべき場所に空白があります。

インターネットで解決策を検索しました。Xap が別のドメインのサービスにアクセスしている場合、または別のドメインの BLOB ストレージにアクセスしている場合には、多くの解決策があります。しかし、これは私の問題と同じではありません。私の xap はサービスにアクセスしません。緑色の四角形が表示されます。

どうすればこれを修正できますか?

4

1 に答える 1

1

私をそこに連れて行ってくれて、Tom と Gaurav に感謝します。これが私の解決策です:

1) 「clientaccesspolicy.xml」というファイルを作成しました。小文字を使用しましたが、それが重要かどうかはわかりません。ファイルに次のように記述します。

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
    <policy>
        <allow-from http-request-headers="SOAPAction">
            <domain uri="*"/>
        </allow-from>
        <grant-to>
            <resource path="/" include-subpaths="true"/>
        </grant-to>
    </policy>
</cross-domain-access>

2) このファイルを BLOB コンテナーのルートにアップロードしました。VS2010 を使用してブロブ ストレージにアクセスしているため、ルート ($root) が表示されません。content-type をアップロードして設定するためのコンソール アプリを作成しました。繰り返しますが、コンテンツ タイプの設定が必要かどうかはわかりませんが、落とし穴になる可能性があります。

これは私が使用したクラスです:

namespace ConsoleApplication
{

/// <summary>
/// 
/// </summary>
public class BlobStorageContainer
{

    /////////////////////////////////////////////////////////////
    // Constants

    private const string BLOB_CONNECTION = <get this from the windows azure portal>;

    public const string ROOT_CONTAINER_NAME = "$root";


    /////////////////////////////////////////////////////////////
    // Attributes

    private static CloudStorageAccount _storageAccount;

    private static CloudBlobClient _blobClient;

    private CloudBlobContainer _container;


    /////////////////////////////////////////////////////////////
    // Construction

    static BlobStorageContainer()
    {

        // Create storage account
        _storageAccount = CloudStorageAccount.Parse(BLOB_CONNECTION);

        // Construct cloud blob client
        _blobClient = _storageAccount.CreateCloudBlobClient();

    }

    public BlobStorageContainer(string strContainer)
    {

        // Get the audio-files container
        _container = _blobClient.GetContainerReference(strContainer);

        try
        {

            // If container does not exist...
            if (!_container.Exists())
            {

                // Create container
                _container.CreateIfNotExists();

                // Set permissions
                BlobContainerPermissions permissions = new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob };
                _container.SetPermissions(permissions);

            }

        }
        catch (Exception x)
        {

            // Reset reference
            _container = null;

            // throw back
            throw x;

        }
    }


    /////////////////////////////////////////////////////////////
    // Operations

    public void SetContentType(string strName, string strContentType)
    {

        // Retrieve the block-blob
        CloudBlockBlob blob = _container.GetBlockBlobReference(strName);
        if (blob.Exists())
        {

            // If props need changing...
            if (blob.Properties.ContentType != strContentType)
            {

                // Set properties
                blob.Properties.ContentType = strContentType;
                blob.SetProperties();

            }

        }

    }

    public void UploadFile(string strFilepath,string strName)
    {

        // Get blob
        CloudBlockBlob blob = _container.GetBlockBlobReference(strName);

        // Open file
        using(FileStream fs = new FileStream(strFilepath,FileMode.Open,FileAccess.Read))
        {
            blob.UploadFromStream(fs);
        } // using fs

    }

    public void WalkBlobs(Func<string, long, string, bool> fnCallback)
    {

        // Loop through the blobs
        foreach (IListBlobItem loop in _container.ListBlobs())
        {

            // If this is a block blob...
            if (loop is CloudBlockBlob)
            {

                // Get the blob
                CloudBlockBlob blob = loop as CloudBlockBlob;

                // Callback function
                bool bContinue = fnCallback(blob.Name, blob.Properties.Length, blob.Properties.ContentType);
                if (!bContinue)
                    break;

            }

        }

    }


}

}

次に、 Main 関数でこれを行いました。

// Open container
BlobStorageContainer container = new BlobStorageContainer(BlobStorageContainer.ROOT_CONTAINER_NAME);

// Upload file
container.UploadFile(@"D:\Workspace\clientaccesspolicy.xml", "clientaccesspolicy.xml");

// Set content type
container.SetContentType("clientaccesspolicy.xml", "text/xml");

3) HTML で、XAP URL を HTTPS から HTTP に変更しました。何らかの理由で、これは機能しませんでした:

<param name="source" value="https://<blobaccount>.blob.core.windows.net/container1/MySilverlight.xap"/>

しかし、これは:

<param name="source" value="http://<blobaccount>.blob.core.windows.net/container1/MySilverlight.xap"/>
于 2013-02-17T10:52:22.653 に答える