Как отправить XDocument через MSMQ (используя WCF)? - PullRequest
2 голосов
/ 16 июля 2010

У меня есть заказ в виде XDocument, и я просто хочу вставить его в тело сообщения и отправить в очередь MSMQ. Я уже эффективно сериализовал объект заказа, и теперь я просто хочу отправить его. Возможно ли это?

Я использую WCF здесь, но я доволен простым старым решением для msmq. Я получаю сообщение об ошибке, указывающее, что XDocument не может быть сериализован ... очевидно, я не могу этого сделать, но как мне вставить мой XDocument в тело сообщения? Нужно ли накатывать свой собственный сериализатор?

public void SendOrder(XDocument order)
{
    var address = new EndpointAddress(@"msmq.formatname:DIRECT=OS:myServer\private$\myQueue");

    var binding = new MsmqIntegrationBinding();
    binding.Security.Mode = MsmqIntegrationSecurityMode.None; 
    binding.ExactlyOnce = false;
    binding.Durable = false;

    var channelFactory = new ChannelFactory<IOrderSubmitter>(binding, address);
    var channel = channelFactory.CreateChannel();

    var message = new MsmqMessage<XDocument>(order);
    message.Label = "Really Big Order with lots of profit";
    message.BodyType = (int)System.Runtime.InteropServices.VarEnum.VT_ARRAY;

    using (var scope = new TransactionScope(TransactionScopeOption.Required))
    {
        channel.SubmitOrder(message);
        scope.Complete();
    }
}

[ServiceContractAttribute(Namespace = "http://my.namespace.com", Name = "Hello")]
public interface IOrderSubmitter
{
    [OperationContract(IsOneWay = true)]
    void SubmitOrder(MsmqMessage<XDocument> message);
}

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

XDocument - это удобная оболочка для данных XML.Нет необходимости сериализовать XDocument, просто отправьте данные XML в виде строки, используя XDocument.ToString ()

1 голос
/ 22 июля 2010

У меня такая же проблема при разработке на Windows 7.Это помещает мою строку XML в другой XML.Все отлично работает на сервере 2003.

Я наконец смог это исправить.Кажется, есть два способа сделать это.Оба включают установку Formatter на XmlMessageFormatter.Вы можете установить Форматтер в MessageQueue или в сообщении перед отправкой и после просмотра / получения.

messageQueue.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(System.String) });
...