2013-04-07 5 views
3

Мне, должно быть, не хватает чего-то очевидного здесь, но я не могу сделать upcast, который я считал законным. Я пытаюсь загрузить данные в хранилище Blob в Azure и хотел бы использовать метод CloudBlob.UploadText(string). Тем не менее, когда я получить доступ к моей блоб, я получаю CloudBlockBlob экземпляр, который, насколько я могу сказать наследуется от CloudBlob, и метод UploadText не доступен, поэтому я попытался let blob = targetBlob :> CloudBlob - который с треском проваливается, с сообщениемНевозможно перейти от CloudBlockBlob к CloudBlob

SmallScript.fsx(28,12): error FS0193: Type constraint mismatch. The type 
    CloudBlockBlob  
is not compatible with type 
    CloudBlob  
The type 'CloudBlockBlob' is not compatible with the type 'CloudBlob' 

Я могу загрузить данные просто отлично, используя UploadFromStream, но UploadText будет очень удобен для моих целей. Может ли кто-нибудь помочь мне увидеть, чего я не вижу?

Для записи, в случае, если это помогает, вот код, который работает:

let credentials = StorageCredentials(accountName, accountKey) 
let storageAccount = CloudStorageAccount(credentials, true) 
let client = storageAccount.CreateCloudBlobClient() 

let containerName = "numerics" 
let container = client.GetContainerReference(containerName) 
container.CreateIfNotExists() |> ignore 

let targetBlobName = "MiniSparseMatrix.csv" 
let targetBlob = container.GetBlockBlobReference(targetBlobName) 

let fileLocation = @"C:\Users\Mathias\Desktop\TestMatrix.txt" 
let stream = System.IO.File.OpenRead(fileLocation) 
targetBlob.UploadFromStream(stream) 
stream.Close() 
+0

Вы можете проверить, используете ли вы библиотеку Client Client 1.8 или 2.0? Причина, по которой я спрашиваю об этом, заключается в том, что 'CreateIfNotExists()' в контейнере blob находится в библиотеке 2.0. В 1.8 он называется 'CreateIfNotExist()' (отсутствует «s»). –

+0

Я считаю, что это октябрьский выпуск Azure SDK, если это ответит на ваш вопрос. Синтаксис, похоже, не является проблемой (сценарий проходит и загружает), это повышается между типами blob, которые терпят неудачу. – Mathias

+0

@GauravMantri на самом деле вы можете что-то сказать, а скрипт отображается, а в других местах контейнер распознает только CreateIfNotExist без s. Я буду копать глубже, ваш намек может быть прав, т. Е. Конфликт между версиями библиотеки. – Mathias

ответ

0

Вы, возможно, ссылки на несколько версий библиотек? Я предполагаю, что CloudBlockBlob, который вы получаете, не из той же сборки (версии), которая совпадает с вашей ссылкой на код, которая имеет тип CloudBlob.

Если вы можете прокомментировать код, который не компилируется, и прикрепить отладчик, вы должны подтвердить это, изучив тип в окне QuickWatch и посмотрев его тип (посмотрите на .GetType().Assembly и сравните его с typeof(CloudBlob).Assembly).