Я пытаюсь записать данные в хранилище таблиц Azure, не используя классы TableContext и Table ServiceEntity, я просто хочу отправить необработанный XML (я хочу гибкость определения схемы на лету).
Когда я делаю это (и подписываю запрос, используя метод из SDK), я получаю 404. Не знаю почему.
Таблица существует. Я пропустил свои учетные данные, но они верны в моем исходном коде.
Приведенный ниже фрагмент кода иллюстрирует проблему.
Любые предложения приветствуются!
using System.IO;
using System.Net;
using System.Text;
using Microsoft.WindowsAzure.StorageClient.Protocol;
public static class Program
{
public static void Main()
{
Credentials credentials = new Credentials("xxx", @"yyy");
var uri = string.Format(@"http://{0}.table.core.windows.net/{1}(PartitionKey='{2}',RowKey='{3}')", credentials.AccountName, "TableName", "1", "1");
var webRequest = (HttpWebRequest)WebRequest.Create(uri);
webRequest.Method = "POST";
webRequest.Headers.Add("DataServiceVersion", "2.0;NetFx");
webRequest.Headers.Add("MaxDataServiceVersion", "2.0;NetFx");
webRequest.ContentType = @"application/atom+xml";
WriteToRequestStream(uri, webRequest);
TableRequest.SignRequestForSharedKeyLite(webRequest, credentials);
var response = webRequest.GetResponse(); // 404 thrown here
}
private static void WriteToRequestStream(string uri, HttpWebRequest webRequest)
{
var sb = new StringBuilder();
sb.Append(@"<?xml version='1.0' encoding='utf-8' standalone='yes'?><entry xmlns:d='http://schemas.microsoft.com/ado/2007/08/dataservices' xmlns:m='http://schemas.microsoft.com/ado/2007/08/dataservices/metadata' xmlns='http://www.w3.org/2005/Atom'><title /><updated>2009-03-18T11:48:34.9840639-07:00</updated><author><name /></author><id>");
sb.Append(uri);
sb.Append(@"</id><content type='application/xml'><m:properties></m:properties></content></entry>");
string body = sb.ToString();
webRequest.ContentLength = body.Length;
UTF8Encoding encoding = new UTF8Encoding();
byte[] bytes = encoding.GetBytes(body);
using (Stream requestStream = webRequest.GetRequestStream())
{
requestStream.Write(bytes, 0, bytes.Length);
}
}
}