本文整理汇总了C#中ODataMessageWriter.CreateODataBatchWriter方法的典型用法代码示例。如果您正苦于以下问题:C# ODataMessageWriter.CreateODataBatchWriter方法的具体用法?C# ODataMessageWriter.CreateODataBatchWriter怎么用?C# ODataMessageWriter.CreateODataBatchWriter使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ODataMessageWriter
的用法示例。
在下文中一共展示了ODataMessageWriter.CreateODataBatchWriter方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: WriteMessageAsync_NullResponse_Throws
public void WriteMessageAsync_NullResponse_Throws()
{
HttpContent content = new StringContent(String.Empty, Encoding.UTF8, "multipart/mixed");
content.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("boundary", Guid.NewGuid().ToString()));
IODataResponseMessage odataResponse = new ODataMessageWrapper(new MemoryStream(), content.Headers);
ODataMessageWriter messageWriter = new ODataMessageWriter(odataResponse);
Assert.ThrowsArgumentNull(
() => ODataBatchResponseItem.WriteMessageAsync(messageWriter.CreateODataBatchWriter(), null).Wait(),
"response");
}
示例2: StartBatchAsync
#pragma warning disable 1998
public override async Task StartBatchAsync()
{
_requestMessage = new ODataRequestMessage() { Url = _session.Settings.BaseUri };
_messageWriter = new ODataMessageWriter(_requestMessage);
#if SILVERLIGHT
_batchWriter = _messageWriter.CreateODataBatchWriter();
_batchWriter.WriteStartBatch();
#else
_batchWriter = await _messageWriter.CreateODataBatchWriterAsync();
await _batchWriter.WriteStartBatchAsync();
#endif
}
示例3: ClientWriteAsyncBatchRequest
private byte[] ClientWriteAsyncBatchRequest()
{
var stream = new MemoryStream();
IODataRequestMessage requestMessage = new InMemoryMessage { Stream = stream };
requestMessage.SetHeader("Content-Type", batchContentType);
using (var messageWriter = new ODataMessageWriter(requestMessage))
{
var batchWriter = messageWriter.CreateODataBatchWriter();
batchWriter.WriteStartBatch();
// Write a query operation.
var queryOperationMessage = batchWriter.CreateOperationRequestMessage("GET", new Uri(serviceDocumentUri + "/Customers('ALFKI')"), /*contentId*/ null);
// Write a changeset with multi update operation.
batchWriter.WriteStartChangeset();
// Create a creation operation in the changeset.
var updateOperationMessage = batchWriter.CreateOperationRequestMessage("POST", new Uri(serviceDocumentUri + "/Customers"), "1");
// Use a new message writer to write the body of this operation.
using (var operationMessageWriter = new ODataMessageWriter(updateOperationMessage))
{
var entryWriter = operationMessageWriter.CreateODataEntryWriter();
var entry = new ODataEntry() { TypeName = "MyNS.Customer", Properties = new[] { new ODataProperty() { Name = "Id", Value = "AFKIL" }, new ODataProperty() { Name = "Name", Value = "Bob" } } };
entryWriter.WriteStart(entry);
entryWriter.WriteEnd();
}
updateOperationMessage = batchWriter.CreateOperationRequestMessage("PATCH", new Uri(serviceDocumentUri + "/Customers('ALFKI')"), "2");
using (var operationMessageWriter = new ODataMessageWriter(updateOperationMessage))
{
var entryWriter = operationMessageWriter.CreateODataEntryWriter();
var entry = new ODataEntry() { TypeName = "MyNS.Customer", Properties = new[] { new ODataProperty() { Name = "Name", Value = "Jack" } } };
entryWriter.WriteStart(entry);
entryWriter.WriteEnd();
}
batchWriter.WriteEndChangeset();
// Write a query operation.
batchWriter.CreateOperationRequestMessage("GET", new Uri(serviceDocumentUri + "/Products"), /*contentId*/ null);
batchWriter.WriteEndBatch();
stream.Position = 0;
return stream.ToArray();
}
}
示例4: SerializeToStreamAsync
/// <inheritdoc/>
protected override async Task SerializeToStreamAsync(Stream stream, TransportContext context)
{
IODataResponseMessage responseMessage = new ODataMessageWrapper(stream, Headers);
ODataMessageWriter messageWriter = new ODataMessageWriter(responseMessage, _writerSettings);
ODataBatchWriter writer = messageWriter.CreateODataBatchWriter();
writer.WriteStartBatch();
foreach (ODataBatchResponseItem response in Responses)
{
await response.WriteResponseAsync(writer, CancellationToken.None);
}
writer.WriteEndBatch();
}
示例5: WriteResponseAsync_WritesOperation
public void WriteResponseAsync_WritesOperation()
{
OperationResponseItem responseItem = new OperationResponseItem(new HttpResponseMessage(HttpStatusCode.Accepted));
MemoryStream memoryStream = new MemoryStream();
IODataResponseMessage responseMessage = new ODataMessageWrapper(memoryStream);
ODataMessageWriter writer = new ODataMessageWriter(responseMessage);
ODataBatchWriter batchWriter = writer.CreateODataBatchWriter();
batchWriter.WriteStartBatch();
responseItem.WriteResponseAsync(batchWriter, CancellationToken.None).Wait();
batchWriter.WriteEndBatch();
memoryStream.Position = 0;
string responseString = new StreamReader(memoryStream).ReadToEnd();
Assert.Contains("Accepted", responseString);
}
示例6: UpdateDataToOData
public string UpdateDataToOData(Change[] changes, string tableName, string[] headers)
{
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, new Uri(this.odataEndpointURL, "$batch"));
requestMessage.Headers.Add("DataServiceVersion", this.odataVersion);
requestMessage.Headers.Add("MaxDataServiceVersion", this.odataMaxVersion);
var setting = new ODataMessageWriterSettings();
setting.SetContentType(ODataFormat.Batch);
setting.BaseUri = this.odataEndpointURL;
var odataHttpRequest = new ODataHttpRequest(requestMessage);
var messageWriter = new ODataMessageWriter(odataHttpRequest, setting, this.metadata);
var batchWriter = messageWriter.CreateODataBatchWriter();
batchWriter.WriteStartBatch();
for (int i = 0; i < changes.Length; i++)
{
batchWriter.WriteStartChangeset();
if (changes[i].operation == "DELETE")
{
createDeleteOperationRequestMessage(ref batchWriter, changes[i], tableName);
}
if (changes[i].operation == "UPDATE")
{
createUpdateOperationRequestMessage(ref batchWriter, changes[i], tableName, headers);
}
batchWriter.WriteEndChangeset();
}
batchWriter.WriteEndBatch();
batchWriter.Flush();
odataHttpRequest.GetStream().Seek(0, SeekOrigin.Begin);
HttpResponseMessage result = new HttpResponseMessage();
using (HttpClient client = new HttpClient())
{
result = client.SendAsync(requestMessage).Result;
}
return parseResponseMessage(result);
}
示例7: WriteResponseAsync_WritesChangeSet
public void WriteResponseAsync_WritesChangeSet()
{
HttpResponseMessage[] responses = new HttpResponseMessage[]
{
new HttpResponseMessage(HttpStatusCode.Accepted),
new HttpResponseMessage(HttpStatusCode.NoContent)
};
ChangeSetResponseItem responseItem = new ChangeSetResponseItem(responses);
MemoryStream memoryStream = new MemoryStream();
IODataResponseMessage responseMessage = new ODataMessageWrapper(memoryStream);
ODataMessageWriter writer = new ODataMessageWriter(responseMessage);
ODataBatchWriter batchWriter = writer.CreateODataBatchWriter();
batchWriter.WriteStartBatch();
responseItem.WriteResponseAsync(batchWriter, CancellationToken.None).Wait();
batchWriter.WriteEndBatch();
memoryStream.Position = 0;
string responseString = new StreamReader(memoryStream).ReadToEnd();
Assert.Contains("changesetresponse", responseString);
Assert.Contains("Accepted", responseString);
Assert.Contains("No Content", responseString);
}
示例8: BuildRequestForTableBatchOperation
internal static Tuple<HttpWebRequest, Stream> BuildRequestForTableBatchOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int? timeout, string tableName, TableBatchOperation batch, bool useVersionHeader, OperationContext ctx, TableRequestOptions options, string accountName)
{
HttpWebRequest msg = BuildRequestCore(NavigationHelper.AppendPathToSingleUri(uri, "$batch"), builder, "POST", timeout, useVersionHeader, ctx);
TablePayloadFormat payloadFormat = options.PayloadFormat.Value;
Logger.LogInformational(ctx, SR.PayloadFormat, payloadFormat);
// create the writer, indent for readability of the examples.
ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings()
{
CheckCharacters = false, // sets this flag on the XmlWriter for ATOM
Version = TableConstants.ODataProtocolVersion // set the Odata version to use when writing the entry
};
HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg, bufferManager);
ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings);
ODataBatchWriter batchWriter = odataWriter.CreateODataBatchWriter();
batchWriter.WriteStartBatch();
bool isQuery = batch.Count == 1 && batch[0].OperationType == TableOperationType.Retrieve;
// Query operations should not be inside changeset in payload
if (!isQuery)
{
// Start Operation
batchWriter.WriteStartChangeset();
batchWriter.Flush();
}
foreach (TableOperation operation in batch)
{
string httpMethod = operation.HttpMethod;
if (operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge)
{
options.AssertNoEncryptionPolicyOrStrictMode();
httpMethod = "MERGE";
}
ODataBatchOperationRequestMessage mimePartMsg = batchWriter.CreateOperationRequestMessage(httpMethod, operation.GenerateRequestURI(uri, tableName));
SetAcceptAndContentTypeForODataBatchMessage(mimePartMsg, payloadFormat);
// etag
if (operation.OperationType == TableOperationType.Delete ||
operation.OperationType == TableOperationType.Replace ||
operation.OperationType == TableOperationType.Merge)
{
mimePartMsg.SetHeader("If-Match", operation.Entity.ETag);
}
// Prefer header
if (operation.OperationType == TableOperationType.Insert)
{
mimePartMsg.SetHeader("Prefer", operation.EchoContent ? "return-content" : "return-no-content");
}
if (operation.OperationType != TableOperationType.Delete && operation.OperationType != TableOperationType.Retrieve)
{
using (ODataMessageWriter batchEntryWriter = new ODataMessageWriter(mimePartMsg, writerSettings, new TableStorageModel(accountName)))
{
// Write entity
ODataWriter entryWriter = batchEntryWriter.CreateODataEntryWriter();
WriteOdataEntity(operation.Entity, operation.OperationType, ctx, entryWriter, options);
}
}
}
if (!isQuery)
{
// End Operation
batchWriter.WriteEndChangeset();
}
// End Batch
batchWriter.WriteEndBatch();
batchWriter.Flush();
return new Tuple<HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream());
}
示例9: BuildRequestForTableBatchOperation
internal static Tuple<HttpWebRequest, Stream> BuildRequestForTableBatchOperation(Uri uri, UriQueryBuilder builder, int? timeout, Uri baseUri, string tableName, TableBatchOperation batch, OperationContext ctx)
{
HttpWebRequest msg = BuildRequestCore(NavigationHelper.AppendPathToUri(uri, "$batch"), builder, "POST", timeout, ctx);
// create the writer, indent for readability of the examples.
ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings()
{
CheckCharacters = false, // sets this flag on the XmlWriter for ATOM
Version = ODataVersion.V2 // set the Odata version to use when writing the entry
};
HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg);
// Start Batch
ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings);
ODataBatchWriter batchWriter = odataWriter.CreateODataBatchWriter();
batchWriter.WriteStartBatch();
bool isQuery = batch.Count == 1 && batch[0].OperationType == TableOperationType.Retrieve;
// Query operations should not be inside changeset in payload
if (!isQuery)
{
// Start Operation
batchWriter.WriteStartChangeset();
batchWriter.Flush();
}
foreach (TableOperation operation in batch)
{
string httpMethod = operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge ? "MERGE" : operation.HttpMethod;
ODataBatchOperationRequestMessage mimePartMsg = batchWriter.CreateOperationRequestMessage(httpMethod, operation.GenerateRequestURI(baseUri, tableName));
// etag
if (operation.OperationType == TableOperationType.Delete ||
operation.OperationType == TableOperationType.Replace ||
operation.OperationType == TableOperationType.Merge)
{
mimePartMsg.SetHeader("If-Match", operation.Entity.ETag);
}
if (operation.OperationType != TableOperationType.Delete && operation.OperationType != TableOperationType.Retrieve)
{
using (ODataMessageWriter batchEntryWriter = new ODataMessageWriter(mimePartMsg, writerSettings))
{
// Write entity
ODataWriter entryWriter = batchEntryWriter.CreateODataEntryWriter();
WriteOdataEntity(operation.Entity, operation.OperationType, ctx, entryWriter);
}
}
}
if (!isQuery)
{
// End Operation
batchWriter.WriteEndChangeset();
}
// End Batch
batchWriter.WriteEndBatch();
batchWriter.Flush();
return new Tuple<HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream());
}
示例10: ServiceReadAsyncBatchRequestAndWriteAsyncResponse
private byte[] ServiceReadAsyncBatchRequestAndWriteAsyncResponse(byte[] requestPayload)
{
IODataRequestMessage requestMessage = new InMemoryMessage() { Stream = new MemoryStream(requestPayload) };
requestMessage.SetHeader("Content-Type", batchContentType);
using (var messageReader = new ODataMessageReader(requestMessage, new ODataMessageReaderSettings(), this.userModel))
{
var responseStream = new MemoryStream();
IODataResponseMessage responseMessage = new InMemoryMessage { Stream = responseStream };
responseMessage.SetHeader("Content-Type", batchContentType);
var messageWriter = new ODataMessageWriter(responseMessage);
var batchWriter = messageWriter.CreateODataBatchWriter();
batchWriter.WriteStartBatch();
var batchReader = messageReader.CreateODataBatchReader();
while (batchReader.Read())
{
switch (batchReader.State)
{
case ODataBatchReaderState.Operation:
// Encountered an operation (either top-level or in a changeset)
var operationMessage = batchReader.CreateOperationRequestMessage();
if (operationMessage.Method == "GET" && operationMessage.Url.AbsolutePath.Contains("ALFKI"))
{
var response = batchWriter.CreateOperationResponseMessage(null);
response.StatusCode = 200;
response.SetHeader("Content-Type", "application/json;");
var settings = new ODataMessageWriterSettings();
settings.SetServiceDocumentUri(new Uri(serviceDocumentUri));
using (var operationMessageWriter = new ODataMessageWriter(response, settings, this.userModel))
{
var entryWriter = operationMessageWriter.CreateODataEntryWriter(this.customers, this.customerType);
var entry = new ODataEntry() { TypeName = "MyNS.Customer", Properties = new[] { new ODataProperty() { Name = "Id", Value = "ALFKI" }, new ODataProperty() { Name = "Name", Value = "John" } } };
entryWriter.WriteStart(entry);
entryWriter.WriteEnd();
}
}
break;
}
}
var asyncResponse = batchWriter.CreateOperationResponseMessage(null);
asyncResponse.StatusCode = 202;
asyncResponse.SetHeader("Location", "http://service/async-monitor");
asyncResponse.SetHeader("Retry-After", "10");
batchWriter.WriteEndBatch();
responseStream.Position = 0;
return responseStream.ToArray();
}
}
示例11: Button2_Click
protected void Button2_Click(object sender, EventArgs e)
{
string accessToken = ((Button)sender).CommandArgument;
Int16 listRetrievalCount = 0;
if (IsPostBack)
{
// Get the host web's URL.
sharepointUrl = new Uri(Request.QueryString["SPHostUrl"]);
}
// Create the parent request
var batchRequest = new BatchODataRequest(String.Format("{0}/_api/", sharepointUrl)); // ctor adds "$batch"
batchRequest.SetHeader("Authorization", "Bearer " + accessToken);
using (var oDataMessageWriter = new ODataMessageWriter(batchRequest))
{
var oDataBatchWriter = oDataMessageWriter.CreateODataBatchWriter();
oDataBatchWriter.WriteStartBatch();
// Create the two child query operations.
oDataBatchWriter.CreateOperationRequestMessage(
"GET", new Uri(sharepointUrl.ToString() + "/_api/Web/lists/getbytitle('Composed Looks')/items?$select=Title"));
listRetrievalCount++;
oDataBatchWriter.CreateOperationRequestMessage(
"GET", new Uri(sharepointUrl.ToString() + "/_api/Web/lists/getbytitle('User Information List')/items?$select=Title"));
listRetrievalCount++;
oDataBatchWriter.WriteEndBatch();
oDataBatchWriter.Flush();
}
// Parse the response and bind the data to the UI controls
var oDataResponse = batchRequest.GetResponse();
using (var oDataReader = new ODataMessageReader(oDataResponse))
{
var oDataBatchReader = oDataReader.CreateODataBatchReader();
while (oDataBatchReader.Read())
{
switch (oDataBatchReader.State)
{
case ODataBatchReaderState.Initial:
// Optionally, handle the start of a batch payload.
break;
case ODataBatchReaderState.Operation:
// Start of an operation (either top-level or in a changeset)
var operationResponse = oDataBatchReader.CreateOperationResponseMessage();
// Response's ATOM markup parsing and presentation section
using (var stream = operationResponse.GetStream())
{
List<XElement> entries = SharePointDataHelpers.ListDataHelper.ExtractListItemsFromATOMResponse(stream);
var itemTitles = SharePointDataHelpers.ListDataHelper.GetItemTitles(entries);
// Bind data to the grid on the page.
// In a production app, check operationResponse.StatusCode and handle non-200 statuses.
// For simplicity, this sample assumes status 200 (the list items are returned).
switch (listRetrievalCount)
{
case 2:
GridView2.DataSource = itemTitles;
GridView2.DataBind();
listRetrievalCount--;
break;
case 1:
GridView1.DataSource = itemTitles;
GridView1.DataBind();
listRetrievalCount--;
break;
}
};
break;
case ODataBatchReaderState.ChangesetStart:
// Optionally, handle the start of a change set.
break;
case ODataBatchReaderState.ChangesetEnd:
// When this sample was created, SharePoint did not support "all or nothing" transactions.
// If that changes in the future this is where you would commit the transaction.
break;
case ODataBatchReaderState.Exception:
// In a producition app handle exeception. Omitted for simplicity in this sample app.
break;
}
}
}
TwoLists.Visible = true;
}
示例12: Button4_Click
protected void Button4_Click(object sender, EventArgs e)
{
string accessToken = ((Button)sender).CommandArgument;
Int16 operationCount = 0;
if (IsPostBack)
{
// Get the host web's URL.
sharepointUrl = new Uri(Request.QueryString["SPHostUrl"]);
}
// Create the parent request
var batchRequest = new BatchODataRequest(String.Format("{0}/_api/", sharepointUrl)); // ctor adds "$batch"
batchRequest.SetHeader("Authorization", "Bearer " + accessToken);
using (var oDataMessageWriter = new ODataMessageWriter(batchRequest))
{
var oDataBatchWriter = oDataMessageWriter.CreateODataBatchWriter();
oDataBatchWriter.WriteStartBatch();
oDataBatchWriter.WriteStartChangeset();
// Create the list deleting operation
var deleteOperation = oDataBatchWriter.CreateOperationRequestMessage(
"DELETE", new Uri(sharepointUrl.ToString() + "/_api/Web/lists/getbytitle(\'" +OldList.Text+ "\')"));
deleteOperation.SetHeader("If-Match", "\"1\"");
oDataBatchWriter.WriteEndChangeset();
operationCount++;
// Create the query operation
var queryOperationMessage3 = oDataBatchWriter.CreateOperationRequestMessage(
"GET", new Uri(sharepointUrl.ToString() + "/_api/Web/lists"));
operationCount++;
oDataBatchWriter.WriteEndBatch();
oDataBatchWriter.Flush();
}
// Parse the response and bind the data to the UI controls
var oDataResponse = batchRequest.GetResponse();
using (var oDataReader = new ODataMessageReader(oDataResponse))
{
var oDataBatchReader = oDataReader.CreateODataBatchReader();
while (oDataBatchReader.Read())
{
switch (oDataBatchReader.State)
{
case ODataBatchReaderState.Initial:
// Optionally, handle the start of a batch payload.
break;
case ODataBatchReaderState.Operation:
// Encountered an operation (either top-level or in a changeset)
var operationResponse = oDataBatchReader.CreateOperationResponseMessage();
// Response ATOM markup parsing and presentation
using (var stream = operationResponse.GetStream())
{
switch (operationCount)
{
case 2: // The "delete list" operation
if (operationResponse.StatusCode == 200)
{
DeleteListResponse.Text = "Your list was deleted!";
}
else
{
DeleteListResponse.Text = "Your list was not deleted. Status returned: " + operationResponse.StatusCode.ToString();
}
operationCount--;
break;
case 1: // The "List of Lists" operation
// Bind data to the grid on the page.
// In a production app, check operationResponse.StatusCode and handle non-200 statuses.
// For simplicity, this sample assumes status 200 (the list items are returned).
List<XElement> entries = SharePointDataHelpers.ListDataHelper.ExtractListItemsFromATOMResponse(stream);
var itemTitles = SharePointDataHelpers.ListDataHelper.GetItemTitles(entries);
GridView4.DataSource = itemTitles;
GridView4.DataBind();
operationCount--;
break;
}
};
break;
case ODataBatchReaderState.ChangesetStart:
// Optionally, handle the start of a change set.
break;
case ODataBatchReaderState.ChangesetEnd:
// When this sample was created, SharePoint did not support "all or nothing" transactions.
// If that changes in the future this is where you would commit the transaction.
//.........这里部分代码省略.........
示例13: Button3_Click
protected void Button3_Click(object sender, EventArgs e)
{
string accessToken = ((Button)sender).CommandArgument;
Int16 operationCount = 0;
if (IsPostBack)
{
// Get the host web's URL.
sharepointUrl = new Uri(Request.QueryString["SPHostUrl"]);
}
// Create the parent request
var batchRequest = new BatchODataRequest(String.Format("{0}/_api/", sharepointUrl)); // ctor adds "$batch"
batchRequest.SetHeader("Authorization", "Bearer " + accessToken);
using (var oDataMessageWriter = new ODataMessageWriter(batchRequest))
{
var oDataBatchWriter = oDataMessageWriter.CreateODataBatchWriter();
oDataBatchWriter.WriteStartBatch();
oDataBatchWriter.WriteStartChangeset();
// Create the list adding operation
var addListOperation = oDataBatchWriter.CreateOperationRequestMessage(
"POST", new Uri(sharepointUrl.ToString() + "/_api/lists"));
addListOperation.SetHeader("Content-Type", "application/json;odata=verbose");
// Write the body of the operation
using (var oDataInsertWriter = new ODataMessageWriter(addListOperation))
{
var entryWriter = oDataInsertWriter.CreateODataEntryWriter();
var insertionBody = new ODataEntry()
{
Properties = new[]
{
new ODataProperty() {Name = "Title", Value = NewList.Text},
new ODataProperty() {Name = "BaseTemplate", Value = "100"}
}
};
// Set the "__metadata" type property
insertionBody.TypeName = "SP.List";
entryWriter.WriteStart(insertionBody);
entryWriter.WriteEnd();
}
oDataBatchWriter.WriteEndChangeset();
operationCount++;
// Create the query operation
var queryOperationMessage3 = oDataBatchWriter.CreateOperationRequestMessage(
"GET", new Uri(sharepointUrl.ToString() + "/_api/Web/lists"));
operationCount++;
oDataBatchWriter.WriteEndBatch();
oDataBatchWriter.Flush();
}
// Parse the response and bind the data to the UI controls
var oDataResponse = batchRequest.GetResponse();
using (var oDataReader = new ODataMessageReader(oDataResponse))
{
var oDataBatchReader = oDataReader.CreateODataBatchReader();
while (oDataBatchReader.Read())
{
switch (oDataBatchReader.State)
{
case ODataBatchReaderState.Initial:
// Optionally, handle the start of a batch payload.
break;
case ODataBatchReaderState.Operation:
// Encountered an operation (either top-level or in a changeset)
var operationResponse = oDataBatchReader.CreateOperationResponseMessage();
// Response ATOM markup parsing and presentation
using (var stream = operationResponse.GetStream())
{
switch (operationCount)
{
case 2: // The "add new list" operation
if (operationResponse.StatusCode == 201)
{
AddListResponse.Text = "Your list was created!";
}
else
{
AddListResponse.Text = "Your list was not created. Status returned: " + operationResponse.StatusCode.ToString();
}
operationCount--;
break;
case 1: // The "List of Lists" operation
//.........这里部分代码省略.........
示例14: ServiceReadSingletonBatchRequestAndWriterBatchResponse
private byte[] ServiceReadSingletonBatchRequestAndWriterBatchResponse(byte[] requestPayload)
{
IODataRequestMessage requestMessage = new InMemoryMessage() { Stream = new MemoryStream(requestPayload) };
requestMessage.SetHeader("Content-Type", batchContentType);
using (var messageReader = new ODataMessageReader(requestMessage, new ODataMessageReaderSettings(), this.userModel))
{
var responseStream = new MemoryStream();
IODataResponseMessage responseMessage = new InMemoryMessage { Stream = responseStream };
responseMessage.SetHeader("Content-Type", batchContentType);
var messageWriter = new ODataMessageWriter(responseMessage);
var batchWriter = messageWriter.CreateODataBatchWriter();
batchWriter.WriteStartBatch();
var batchReader = messageReader.CreateODataBatchReader();
while (batchReader.Read())
{
switch (batchReader.State)
{
case ODataBatchReaderState.Operation:
// Encountered an operation (either top-level or in a changeset)
var operationMessage = batchReader.CreateOperationRequestMessage();
if (operationMessage.Method == "PATCH")
{
var response = batchWriter.CreateOperationResponseMessage(operationMessage.ContentId);
response.StatusCode = 204;
response.SetHeader("Content-Type", "application/json;odata.metadata=none");
}
else if (operationMessage.Method == "GET")
{
var response = batchWriter.CreateOperationResponseMessage(null);
response.StatusCode = 200;
response.SetHeader("Content-Type", "application/json;");
var settings = new ODataMessageWriterSettings();
settings.SetServiceDocumentUri(new Uri(serviceDocumentUri));
using (var operationMessageWriter = new ODataMessageWriter(response, settings, this.userModel))
{
var entryWriter = operationMessageWriter.CreateODataEntryWriter(this.singleton, this.webType);
var entry = new ODataEntry() { TypeName = "NS.Web", Properties = new[] { new ODataProperty() { Name = "WebId", Value = 10 }, new ODataProperty() { Name = "Name", Value = "WebSingleton" } } };
entryWriter.WriteStart(entry);
entryWriter.WriteEnd();
}
}
else if (operationMessage.Method == "DELETE")
{
var response = batchWriter.CreateOperationResponseMessage(operationMessage.ContentId);
response.StatusCode = 500;
}
break;
case ODataBatchReaderState.ChangesetStart:
batchWriter.WriteStartChangeset();
break;
case ODataBatchReaderState.ChangesetEnd:
batchWriter.WriteEndChangeset();
break;
}
}
batchWriter.WriteEndBatch();
responseStream.Position = 0;
return responseStream.ToArray();
}
}
示例15: ClientWriteSingletonBatchRequest
private byte[] ClientWriteSingletonBatchRequest()
{
var stream = new MemoryStream();
IODataRequestMessage requestMessage = new InMemoryMessage { Stream = stream };
requestMessage.SetHeader("Content-Type", batchContentType);
using (var messageWriter = new ODataMessageWriter(requestMessage))
{
var batchWriter = messageWriter.CreateODataBatchWriter();
batchWriter.WriteStartBatch();
// Write a query operation.
var queryOperationMessage = batchWriter.CreateOperationRequestMessage("GET", new Uri(serviceDocumentUri + "/MySingleton"), /*contentId*/ null);
// Header modification on inner payload.
queryOperationMessage.SetHeader("Accept", "application/json;odata.metadata=full");
// Write a changeset with multi update operation.
batchWriter.WriteStartChangeset();
// Create a update operation in the changeset.
var updateOperationMessage = batchWriter.CreateOperationRequestMessage("PATCH", new Uri(serviceDocumentUri + "/MySingleton"), "1");
// Use a new message writer to write the body of this operation.
using (var operationMessageWriter = new ODataMessageWriter(updateOperationMessage))
{
var entryWriter = operationMessageWriter.CreateODataEntryWriter();
var entry = new ODataEntry() { TypeName = "NS.Web", Properties = new[] { new ODataProperty() { Name = "WebId", Value = 10 }, new ODataProperty() { Name = "Name", Value = "SingletonWeb" } } };
entryWriter.WriteStart(entry);
entryWriter.WriteEnd();
}
updateOperationMessage = batchWriter.CreateOperationRequestMessage("PATCH", new Uri(serviceDocumentUri + "/MySingleton"), "2");
using (var operationMessageWriter = new ODataMessageWriter(updateOperationMessage))
{
var entryWriter = operationMessageWriter.CreateODataEntryWriter();
var entry = new ODataEntry() { TypeName = "NS.Web", Properties = new[] { new ODataProperty() { Name = "WebId", Value = 111 } } };
entryWriter.WriteStart(entry);
entryWriter.WriteEnd();
}
batchWriter.WriteEndChangeset();
// Write a query operation.
queryOperationMessage = batchWriter.CreateOperationRequestMessage("GET", new Uri(serviceDocumentUri + "/MySingleton/WebId"), /*contentId*/ null);
queryOperationMessage.SetHeader("Accept", "application/json;odata.metadata=full");
// DELETE singleton, invalid
batchWriter.WriteStartChangeset();
batchWriter.CreateOperationRequestMessage("DELETE", new Uri(serviceDocumentUri + "MySingleton"), "1");
batchWriter.WriteEndChangeset();
batchWriter.WriteEndBatch();
stream.Position = 0;
return stream.ToArray();
}
}