HTML-форма POST для службы WCF - PullRequest
0 голосов
/ 05 июля 2011

Возникли проблемы с получением службы WCF для работы с публикацией в формате HTML Я создаю сервис SVGToPng. Служба принимает строку (данные SVG) и преобразует ее в изображение для загрузки (с диалогом сохранения файла). Сейчас все существующие сервисы настроены на использование JSON в качестве типа сообщения. Этот конкретный метод будет уникальным, тогда как мне нужно выполнить старомодную форму POST.

Вот интерфейс для службы.

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = UriTemplate.SvgExportPng, BodyStyle = WebMessageBodyStyle.Bare)]
Stream ExportSvgToPng(String svgData);

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

WebOperationContext.Current.OutgoingResponse.ContentType = "image/png";
WebOperationContext.Current.OutgoingResponse.Headers.Clear();
WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-disposition", "attachment; filename=export-" + DateTime.Now.ToString("MM-dd-yyyy") + ".png");

return File.OpenRead(@"C:\tmp.png");

В моем javascript я динамически создаю форму, добавляю нужные мне значения, POST форму, затем удаляю ее из документа. Вот javascript.

form.setAttribute("method", "POST");
form.setAttribute("action", Daedalus.Current.WcfUrl + '/svg/png');

hiddenField.setAttribute("name", "svgData");
hiddenField.setAttribute("value", view.trend.getSVG());

form.appendChild(hiddenField);
document.body.appendChild(form);

form.submit();
document.body.removeChild(form);

Наконец, вот сообщение об ошибке, которое я получаю в моих файлах журнала WCF.

Входящее сообщение имеет неожиданный формат сообщения «Raw». Ожидаемые форматы сообщений для операции: «Xml», «Json». Это может быть потому, что в привязке не настроен WebContentTypeMapper. См. Документацию WebContentTypeMapper для получения более подробной информации.

Любая помощь высоко ценится, заранее спасибо.

1 Ответ

1 голос
/ 05 июля 2011

Ваша операция ожидает строку - и в определенном формате, который является либо строкой JSON (с типом содержимого applicationaiton / json), либо в виде XML, заключенного в элемент <string> (с пространством имен сериализации) и типом содержимого text / XML (или приложение / XML). Проблема заключается в том, что форма POST отправляет данные в форме / в кодировке URL (тип содержимого application / x-www-form-urlencoded).

WCF не поддерживает готовые формы, закодированные по формам, но вы можете либо получить "jQuery support" из http://wcf.codeplex.com, в которой есть некоторые классы для поддержки, либо принять входные данные как Поток (как вы делаете с выводом) и анализируйте данные формы / urlencoded самостоятельно.

...