我在调试模式下运行它,并附加了一个包含异常详细信息的图像。我怎么知道出了什么问题?我试图在表中插入数据。azure不能告诉我更多细节吗?
Obs:存储在Windows Azure上,而不是我的机器上。表已创建,但我在插入数据时出现此错误
// Retrieve the storage account from the connection string.
Microsoft.WindowsAzure.Storage.CloudStorageAccount storageAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=***;AccountKey=***");
// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
// Create the table if it doesn't exist.
CloudTable table = tableClient.GetTableReference("EmployeeOnlineHistory");
table.CreateIfNotExists();
下面是插入代码:
public static void SetStatus(Employee e, bool value)
{
try
{
// Retrieve the storage account from the connection string.
Microsoft.WindowsAzure.Storage.CloudStorageAccount storageAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=###;AccountKey=###");
// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
// Create the CloudTable object that represents the "people" table.
CloudTable table = tableClient.GetTableReference("EmployeeOnlineHistory");
// Create a new customer entity.
if (value == true)
{
EmployeeOnlineHistory empHistory = new EmployeeOnlineHistory(e.Id);
empHistory.IsOnline = true;
empHistory.OnlineTimestamp = DateTime.Now;
TableOperation insertOperation = TableOperation.Insert(empHistory);
table.Execute(insertOperation);
}
else
{
TableQuery<EmployeeOnlineHistory> query = new TableQuery<EmployeeOnlineHistory>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, e.Id.ToString()));
EmployeeOnlineHistory entity = table.ExecuteQuery(query).Take(1).FirstOrDefault();
if ((entity!=null)&&(entity.IsOnline))
{
entity.IsOnline = false;
entity.OfflineTimestamp = DateTime.Now;
entity.OnlineTime = (entity.OfflineTimestamp - entity.OnlineTimestamp);
TableOperation updateOperation = TableOperation.Replace(entity);
table.Execute(updateOperation);
}
else
{
EmployeeOnlineHistory empHistory = new EmployeeOnlineHistory(e.Id);
empHistory.IsOnline = false;
empHistory.OfflineTimestamp = DateTime.Now;
TableOperation insertOperation = TableOperation.Insert(empHistory);
table.Execute(insertOperation);
}
}
}
catch (Exception ex)
{
//var details = new System.IO.StreamReader(((Microsoft.WindowsAzure.Storage.StorageException)ex)..Response.GetResponseStream()).ReadToEnd();
LogFile.Error("EmployeeOnlineHistory.setStatus",ex);
}
}
在我的例子中,它是RowKey中的一个正斜杠。
我还收到一个“OutOfRangeInput-其中一个请求输入超出范围”尝试通过存储仿真器手动添加时出错。
关键字段中不允许的字符
PartitionKey和RowKey属性的值中不允许包含以下字符:
http://msdn.microsoft.com/en-us/library/dd179338.aspx
我写了一个扩展方法来帮我处理这个问题。
public static string ToAzureKeyString(this string str)
{
var sb = new StringBuilder();
foreach (var c in str
.Where(c => c != '/'
&& c != '\\'
&& c != '#'
&& c != '/'
&& c != '?'
&& !char.IsControl(c)))
sb.Append(c);
return sb.ToString();
}
StorageException还包含一些关于错误的更详细的信息。
签入调试器:StorageException.RequestInformation.ExtendedInformation
400错误意味着您的某个属性的值有问题。一种方法是通过Fiddler跟踪请求/响应,并查看发送到Windows Azure存储的实际数据。
大胆猜测一下,我假设你的代码中有一些日期/时间类型属性(OfflineTimestamp、OnlineTimestamp),并观察到在某些情况下,其中一个属性是用默认值“DateTime.MinValue”初始化的。请注意,在Windows Azure[html" target="_blank">http://msdn.microsoft.com/en-us/library/windowsazure/dd179338.aspx]中,日期/时间类型属性允许的最小值是1601年1月1日(UTC)。请看看是否是这样。如果是这样,那么您可以将它们设为可空类型字段,这样它们就不会填充默认值。
看看尤哈·帕洛马基在下面的答案...有时在他建议的异常中有一个稍微有用的消息(请求信息.扩展错误信息.错误消息)
我正在尝试创建azure存储表,并使用c#向其中插入记录。我已经成功地创建了表,但是在向其中插入记录时,它给出了400错误请求存储异常。 签入调试器后: StorageException.RequestInformation.ExtendedErrorInformation.ErrorMessage 它显示超出范围输入错误 \n请求 Id:862fdbae-6002-000c-1e7c-ef937
问题内容: 这工作正常: 这将返回400 Bad Request(只是使用.ajax来支持错误处理的上述jQuery的重新格式)。 问题答案: 我认为您只需要再添加2个选项(和):
我试图简单地使用Azure创建一个新的存储队列,但它一直崩溃而没有解释,创建表工作正常,这是相关代码: 行< code>healingQueue中的代码崩溃。CreateIfNotExists();以及< code>(400)错误请求的说明 表创建得很好,所以我假设存储帐户没有问题,知道我能做什么吗?
我试图使用Gmail API将用户设置应用到Gmail帐户,但它不断返回错误400错误请求。 我可以看到错误代码在Gmail API控制台,它来自我的服务号,所以代码不可能是如此错误,但它让我发疯,只是不能找出什么是错误的。 如果有人能给我指出正确的方向,我会非常感激。
问题内容: 我有这个应用程序,它可以在本地运行,并且在部署时可以使用.mdf SQL Express数据库文件(通常用于测试目的)。但是,当我将其更改为可与我们的SQL Server 2008一起使用时,该应用程序可以运行,但该服务无法运行。 例如,如果在页面后面的代码中,我有一个按钮可以向表中添加数据,例如: 我的web.config设置为在该服务器上使用模拟,并且一切运行良好。但是,对于我的服
我在本地服务器上找到了它失败的代码: 在我看来,它似乎不能获得或?