私はAndroidクライアントとモバイルAzureサービスアプリを使用するPOCアプリケーションを行っています。MobileServiceInvalidOperationException:要求を完了できませんでした。 (Bad Request)を
テキストと小さなイメージを保存するために、SQL Server Compact 4.0データベースファイルを使用するソリューションを実装しました(それぞれ最大300KBの計画があります)。
はどのようにこれまでに、それだけでも、最低品質(:image.Compress(Bitmap.CompressFormat.Jpeg, 0, stream);
これを使用して)
をJPEG形式で圧縮されている本当に小さな画像(例えば2 KB)のために動作します。アプリケーションを使用してアイテムを保存しようとすると大きな画像用のエラー:
私は「要求を完了できませんでした(不正なリクエスト)。Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException」を入手できますか。私は要求の長さ制限についての正確な言及については、どこにも答えが見つかりませんでした、私はこれを仮定しました。
だから私の質問は - はAzureですこのタスクを達成する唯一の方法は? (Azure Storageを使用している無料のオプションもありません)。
コンテンツのアップロードとUI部品(私はXamarinを使用しています)
(_currentImage変数に)アップロードする画像を選択します。
protected override void OnActivityResult(int requestCode, Result result, Intent data)
{
base.OnActivityResult(requestCode, result, data);
if (requestCode == 1)
{
if (result == Result.Ok)
{
var selectedImage = data.Data;
var filePath = GetPathToImage(selectedImage);
var photo = BitmapFactory.DecodeFile(filePath);
_currentImage = photo;
ImagePreview.SetImageBitmap(photo);
}
}
}
保存コンテンツ呼び出すAzureのモバイルアプリ:
private async void UploadItemContent()
{
using (MobileServiceClient client = new MobileServiceClient(Configuration.Urls.CloudAppUrl))
{
var table = client.GetTable<Item>();
var content = ContentDescriptionEditText.Text;
var header = ContentHeaderEditText.Text;
var stream = new MemoryStream();
_currentImage.Compress(Bitmap.CompressFormat.Jpeg, 0, stream);
var bitmapData = stream.ToArray();
var item = new Item
{
Content = content,
Header = header,
Image = bitmapData,
CreationDate = DateTime.Now.ToUniversalTime()
};
try
{
await table.InsertAsync(item);
ShowSuccessStatus();
}
catch (Exception ex)
{
ShowError(ex.Message);
}
}
}
バックエンド
Azureのモバイルサービスへ項目の定義:Azureのモバイルサービスへの
public class Item : ITableData
{
public Item()
{
}
[Key]
[TableColumn(TableColumnType.Id)]
public string Id { get; set; }
public string Header { get; set; }
public string Content { get; set; }
[Column(TypeName = "image")]
public byte[] Image { get; set; }
public DateTime? CreationDate { get; set; }
public DateTime? UpdateDate { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[Index(IsClustered = true)]
[TableColumn(TableColumnType.CreatedAt)]
public DateTime? CreatedAt { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[TableColumn(TableColumnType.UpdatedAt)]
public DateTime? UpdatedAt { get; set; }
[TableColumn(TableColumnType.Deleted)]
public bool Deleted { get; set; }
[TableColumn(TableColumnType.Version)]
[Timestamp]
public byte[] Version { get; set; }
[NotMapped]
DateTimeOffset? ITableData.CreatedAt
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
[NotMapped]
DateTimeOffset? ITableData.UpdatedAt
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
}
ItemController:
public class ItemController : TableController<Item>
{
protected override void Initialize(HttpControllerContext controllerContext)
{
base.Initialize(controllerContext);
MobileServiceContext context = new MobileServiceContext();
DomainManager = new EntityDomainManager<Item>(context, Request);
}
...
}
コードに関する詳細情報を提供できますか? – johnny
関連するコードを追加しました – aly