2016-04-17 9 views
0

私はC#で単純なAzure Webappを開発しました。 Azureストレージアカウントのテーブルを使用して、ウェブサイトのいくつかの種類のレコードを保存します。Azureストレージアカウントが書き込み時にHTTP 400エラーを投げる

実際の接続文字列を使用して、読み取りと書き込みの両方の操作で自分のコンピュータで正常に動作します。私は "Azure Storage Explorer"でレコードを見つけることができます。

しかし、私はアプリを展開した後。クラウド版では、表を書き込もうとするとHTTP 400のエラーが発生します。しかし、読み取り操作はまだ正常に動作します。 (ローカルバージョンは、常にOKです。)

enter image description here

問題は奇妙です。それで私を助けてください。

ありがとうございました。

== UPDATE ==

&クエリコードを保存し、このようなものです。

public class CodeSnippet: TableEntity 
{ 
    public string Title { get; set; } 
    public string Author { get; set; } 
    public string FileType { get; set; } 
    public string Code { get; set; } 

    public Guid Save() 
    { 
     var guid = Guid.NewGuid(); 
     var datetime = DateTimeOffset.UtcNow; 

     this.RowKey = guid.ToString(); 
     this.PartitionKey = datetime.ToString(); 

     var json = JsonConvert.SerializeObject(this); 

     var client = AzureStorage.DefaultClient.Instance.GetTableClient(); 
     var table = client.GetTableReference("privateshare"); 
     var insertOp = TableOperation.Insert(this); 

     table.Execute(insertOp); 
     return guid; 
    } 

    public static CodeSnippet Query(Guid? guid) 
    { 
     if (guid == null) 
     { 
      return null; 
     } 
     var client = AzureStorage.DefaultClient.Instance.GetTableClient(); 
     var table = client.GetTableReference("privateshare"); 

     var query = new TableQuery<CodeSnippet>() 
      .Where(TableQuery.GenerateFilterCondition(
       "RowKey", QueryComparisons.Equal, guid.ToString())) 
      .Take(1); 
     var res = table.ExecuteQuery(query); 
     return res?.First(); 
    } 
} 
+0

エラーは、通常、書き込みしようとしているデータに何か問題があることを意味します。あなたのアプリがクラウドにデプロイされているときに書き込もうとしているデータを共有できますか?また、コードを共有することもできれば便利です。 –

答えて

1

問題を解決しました。

DateTimeOffset.UtcNow.ToString()をパーティションキーとして使用するとエラーが発生します。

DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString()に変更すると、最終的に正常に動作します。

どのように問題が発生するのかわかりません。&しかし、私は "PartitionKey"の特殊文字が問題の原因かもしれないと思います。

+0

'しかし、" PartitionKey "の特殊文字が問題の原因かもしれないと思います。" - >これはまさに問題です。日付/時刻を文字列に変換すると、 '/'文字を含む 'mm/dd/yyyy'形式で書き込まれますが、これはPartitionKey値の文字ではありません。詳細は私の答えをご覧ください:http://stackoverflow.com/questions/36589493/query-execution-on-azure-storage-is-very-slow/36589742#36589742 –

+0

@GauravMantriしかし、ローカルバージョンは正常に動作します。(悲しい)日付文字列には文字 '/'は含まれていません。おそらく問題を引き起こすのは ':'、 '+'か空白です。 – Wizmann

関連する問題