У меня есть следующая простая страница приложения, которая использует камеру телефона для загрузки сделанной фотографии в лазурный блоб:
public partial class AddReport : PhoneApplicationPage
{
// blobs stuff
string storageAccount = "MYACCOUNT";
string storageKey = "MYKEY";
string blobServiceUri = "http://MYACCOUNT.blob.core.windows.net";
CloudBlobClient blobClient;
private Report newReport;
public AddReport()
{
InitializeComponent();
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
//base.OnNavigatedTo(e);
newReport = new Report();
var credentials = new StorageCredentialsAccountAndKey(storageAccount, storageKey);
blobClient = new CloudBlobClient(blobServiceUri, credentials);
}
private void TakePhotoClick(object sender, EventArgs eventArgs)
{
//The camera chooser used to capture a picture.
CameraCaptureTask ctask;
//Create new instance of CameraCaptureClass
ctask = new CameraCaptureTask();
//Create new event handler for capturing a photo
ctask.Completed += new EventHandler<PhotoResult>(ctask_Completed);
//Show the camera.
ctask.Show();
}
void ctask_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK && e.ChosenPhoto != null)
{
WriteableBitmap CapturedImage = PictureDecoder.DecodeJpeg(e.ChosenPhoto);
UploadToBlobContainer(e.ChosenPhoto);
}
else
{
//user decided not to take a picture
}
}
private void UploadToBlobContainer(System.IO.Stream stream)
{
string containerName = "reportsPhotos";
var container = blobClient.GetContainerReference(containerName);
container.CreateIfNotExist(true, r =>
Dispatcher.BeginInvoke(() =>
{
var blobName = "report" + newReport.ReportId.ToString();
var blob = container.GetBlobReference(blobName);
blob.Metadata["ReportId"] = newReport.ReportId.ToString();
blob.UploadFromStream(stream, r2 =>
Dispatcher.BeginInvoke(() =>
{
newReport.Photo = container.Uri + "/" + blobName;
}));
}));
}
}
Это простой случай, и я не использую SAS для аутентификации, вместо этого я сохраняю ключ в самом приложении (это только для целей тестирования), а также мои блобы общедоступны.
когда я запускаю в режиме отладки, кажется, что все работает, но фотография не загружается в блоб. Кроме того, я не знаю, как я могу отладить это, чтобы увидеть, была ли какая-либо ошибка от службы BLOB-объектов.
Может ли кто-нибудь сказать мне, что может быть не так?
EDIT1: кажется, что контейнер тоже не создается. я подтвердил это с помощью Azure Blob Explorer
EDIT2: я получаю System.Net.WebException : "The remote server returned an error: NotFound."
WindowsPhoneCloud.StorageClient
иMicrosoft.Samples.Data.Services.Client
из WAT для WP. Чтобы узнать, был ли загружен большой двоичный объект, я использую обозреватель хранилища BLOB-объектов Azure: blobexplorer.codeplex.com. - person Michael   schedule 27.04.2012