Атрибут WCF XmlSerialization (POST) - PullRequest
       14

Атрибут WCF XmlSerialization (POST)

1 голос
/ 17 сентября 2009

В настоящее время у меня есть служба WCF для использования удаленной службы REST со следующим:

[ServiceContract]
[XmlSerializerFormat]
public interface IMyApi
{
 [OperationContract]
 [WebGet(
  ResponseFormat = WebMessage.Xml,
  UriTemplate = "RemoteServicePage.jsp")]
 MyNewClass Send();
}

Приятной частью этого является атрибут XmlSerializerFormat. Автоматически десериализует ответ в тип возврата метода (т. Е. POX response => MyNewClass).

Однако мне не удалось найти какие-либо образцы реверса. Я хотел бы отправить запрос POX на данную услугу. Мне любопытно, есть ли подобный способ передачи объекта в службу WCF, которая, в свою очередь, отправляет целевой запрос post.

Любые мысли очень ценятся.

UPDATE

Просто уточнение вопроса:

Можно ли опубликовать объект в веб-сервисе через WCF (который обрабатывает сериализацию)?

UPDATE

Я полагаю, что Стив коснулся того, что я считаю правильным направлением ниже, используя метод WebInvoke и атрибут RequestFormat для достижения того, что я ищу. Я предполагаю, что хочу отметить, что я не размещаю веб-сервис, который позволяет размещать сообщения, а пытаюсь опубликовать его во внешнем веб-сервисе (например, на удаленном * .jsp) с помощью WCF.

WCF обеспечивает простое использование и доступ к внешним веб-службам, и это то, с чем я знаком. Однако я никогда не пытался опубликовать поток или объект во внешнем источнике (публикация через UriTemplate проста).

Ответы [ 3 ]

1 голос
/ 22 сентября 2009

Я не понимаю. Почему бы просто не использовать HttpWebRequest? Одним из преимуществ REST по HTTP является то, что вы можете использовать стандартные библиотеки HTTP. Выполнение POST с HttpWebRequest относительно тривиально. Зачем тебе WCF? Если вы хотите сериализовать объект в ваше тело POST, вы можете сделать это либо с помощью DataContractSerializer, либо с помощью XmlSerializer.

Если вам действительно не нравится этот параметр, посмотрите на новый класс Microsoft.Http.HttpClient, который есть в предварительном выпуске WCF Rest Starter Kit 2. Это очень хорошая клиентская библиотека, и, несмотря на ее название и упаковку, даже не имеет зависимости от WCF!

Этот ответ основан на вашем втором обновлении. Я говорю это только потому, что ваше первоначальное утверждение «У меня есть служба WCF для использования удаленной службы REST» не имеет смысла. Вы не можете декларативно определить удаленный интерфейс, который вы хотите использовать. Термин WebInvoke - это не то, о чем вы думаете, это просто атрибут catch all для обработки не GET-запросов. WebGet и WebInvoke обрабатывают входящие запросы.

Если вы хотите использовать удаленный интерфейс "REST", вам нужно использовать HttpWebRequest или новый класс HttpClient.

1 голос
/ 18 сентября 2009

Не думаю, что вы понимаете значение XmlSerializerFormat. Это означает, что вместо сериализатора контракта данных следует использовать XML-сериализатор. Оба будут сериализованы в XML.

0 голосов
/ 18 сентября 2009

Используйте атрибут RequestFormat. Для JSON это будет

[WebInvoke(Method = "POST",
                 BodyStyle = WebMessageBodyStyle.WrappedRequest,
                 ResponseFormat = WebMessageFormat.Json,
                 RequestFormat = WebMessageFormat.Json)]

Удачи

...