WCF Batch Response сформирован неправильно - PullRequest
1 голос
/ 11 февраля 2012

Я использую конвейер обработки службы данных WCF, чтобы настроить обработку уведомлений перед обработкой наборов изменений. Я использую пакетный режим для отправки своих изменений. Я тестирую сценарий, в котором служба уведомлений не работает, и поэтому мы отправляем конкретное сообщение до обработки набора изменений.

Вот как настроен мой код

ProcessingPipeline.ProcessingChangeset += ProcessingChangeset;

Вы можете легко подражать моей ошибке следующим образом:

private void ProcessingChangeset(object sender, EventArgs e)
{
    throw new Exception("Some Specific Messsage");
}

Когда я запускаю тест, я не получаю ожидаемое исключение "Некоторое конкретное сообщение". Вместо этого я получаю:

System.Data.Services.Client.DataServiceRequestException: ошибка произошло при обработке этого запроса. ---> System.InvalidOperationException: отсутствует граница набора изменений разделитель. Пожалуйста, убедитесь, что разделитель границ изменения набора указано для обозначения конца набора изменений.

Я проверил ответ теста, используя Fiddler, чтобы увидеть его содержимое.

--batchresponse_f158ae30-03c4-479e-8dda-a9129d2a1036
Content-Type: multipart/mixed; boundary=changesetresponse_92c24e82-47ad-43a2-b3e2-79d9e5ada261

--batchresponse_f158ae30-03c4-479e-8dda-a9129d2a1036
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 500 Internal Server Error
DataServiceVersion: 1.0;
Content-Type: application/xml

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <code></code>
  <message xml:lang="en-US">An error occurred while processing this request.</message>
  <innererror>
    <message>Some Specific Message</message>
    <type>System.Exception</type>
    <stacktrace>   at SM.Service.BaseService`1.ProcessingChangeset(Object sender, EventArgs e) in C:\svn\gr-core\ServiceManager\trunk\SM.Service\BaseService.cs:line 71&#xD;
   at System.Data.Services.DataServiceProcessingPipeline.InvokeProcessingChangeset(Object sender, EventArgs e)&#xD;
   at System.Data.Services.DataService`1.BatchDataService.HandleBatchContent(Stream responseStream)</stacktrace>
  </innererror>
</error>
--changesetresponse_92c24e82-47ad-43a2-b3e2-79d9e5ada261
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 204 No Content
Content-ID: 2
Cache-Control: no-cache
DataServiceVersion: 1.0;


--changesetresponse_92c24e82-47ad-43a2-b3e2-79d9e5ada261--
--batchresponse_f158ae30-03c4-479e-8dda-a9129d2a1036--

Похоже, проблема может быть в дублированных записях пакетов. Кто-нибудь сталкивался с этим или нашел обходной путь, чтобы можно было вернуть соответствующее сообщение?

Все остальные наши функциональные тесты, которые имеют ошибки при обработке набора изменений (не ранее), возвращают ожидаемые сообщения.

1 Ответ

2 голосов
/ 13 февраля 2012

Это действительно похоже на ошибку.Я проверил наши последние сборки, и поведение определенно лучше (без дублирующих границ, но, насколько я могу судить, правильный ответ об ошибке).Вы можете попробовать последнюю версию CTP, которая может быть исправлена ​​здесь: http://blogs.msdn.com/b/astoriateam/archive/2011/10/13/announcing-wcf-data-services-oct-2011-ctp-for-net-4-and-silverlight-4.aspx

...