WCF с сериализацией сообщений - PullRequest
0 голосов
/ 09 января 2010

Я пишу простой сервис wcf, который отправляет запрос на какой-то шлюз для обработки.

Запрос выполняется, выполняя что-то вроде этого:

Я пишу сервис WCF, который отправляет запрос в какой-то сервис, который ожидает получить что-то вроде этого:

gatewayService.SendRequest(request);

где gatewayService - прокси WCF, а запрос - мой собственный объект, который наследует объект сообщения WCF.

Объект запроса имеет несколько свойств, таких как:

[MessageBodyMember]
public ReportCommandLineRequest ReportRequest { get; set; }

[MessageBodyMember]
public ImportCommandLineRequest ImportRequest { get; set; }

Моя проблема в том, что этот объект запроса сериализуется. На стороне сервера я получаю большое мыльное сообщение, которое выглядит так:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" 
            xmlns:a="http://www.w3.org/2005/08/addressing">
   <s:Header>
      <a:Action s:mustUnderstand="1">http://tempuri.org/IReportClient/RunReport/IGatewayAdapter/SendRequest</a:Action>
      <VsDebuggerCausalityData xmlns="http://schemas.microsoft.com/vstudio/diagnostics/servicemodelsink">uIDPo4jiWNjcsdxHiUhlOA63xYEAAAAApgt+BuVvcEixP33+yOQTgRHZQSyr4L5ImMHVeEWLFBMACQAA</VsDebuggerCausalityData>
      <a:To s:mustUnderstand="1">net.tems://localhost:7222/queue/LB.FIA.Gateway.STAGE.InputQueue</a:To>
   </s:Header>
   <s:Body>
      <SendRequest xmlns="http://tempuri.org/IReportClient/RunReport">
          <request xmlns:b="http://schemas.datacontract.org/2004/07....

С другой стороны, я ожидаю, что на стороне сервера получит только сериализацию свойств, перечисленных выше (ReportRequest / ImportRequest), и надеется получить сериализованный xml, который выглядит так (без всего мусора внутри:

<ReportCommandLineRequest>
  <outputFileName>gatewayReportOutput-01082010-150043.pdf</outputFileName>
  <CommandLineArg
    name="format"
..
</ReportCommandLineRequest>

Может кто-нибудь помочь мне выяснить, как я могу это сделать?

Спасибо.

1 Ответ

4 голосов
/ 09 января 2010

WCF IS служба сообщений на основе SOAP - так что факт, что вы получаете "большое короткое мыльное сообщение", в некотором роде "на самом деле"!

Но в чем проблема на самом деле ?? SOAP - это четко определенный протокол, и каждая достойная платформа веб-служб говорит и понимает SOAP.

Плюс, как правило, в WCF вы все равно не имеете дело с «необработанными» сообщениями - вы определяете свои структуры данных, которыми обмениваются ваши служба и клиент, вы определяете классы как [DataContract], которые отправляются туда и обратно, и вы Позвольте WCF и SOAP обрабатывать все мельчайшие детали сериализации и десериализации вашего сообщения из XML и в XML. Как правило, вам вообще не нужно иметь дело с этим.

Итак, еще раз: в чем тут проблема или вопрос? WCF - это SOAP (а теперь и REST) ​​- так почему это сообщение SOAP удивляет вас или вызывает проблемы ??

WCF также поддерживает обработку «сырых» сообщений и позволяет вам делать такие вещи, как извлечение тела из сообщения SOAP и т. Д. (Или настроить его иначе). Посмотрите некоторые из этих постов в блоге для некоторых указателей на то, что возможно и что вы можете сделать:

...