с# WCF отправляем сообщения

Сначала конечно же генерируем Service client . Для этого заходим в ServiceReference и там жмем "Добавить ссылку на службу"

Далее мы можем отправить сообщение оборачивая в Envelope


ServiceReference1.ServiceSAClient service = new ServiceReference1.ServiceSAClient();
using (FileStream stream = new FileStream(textBox1.Text, FileMode.Open))
{
         mlReader reader = XmlReader.Create(stream);
         MessageVersion ver = MessageVersion.CreateVersion(EnvelopeVersion.Soap11, AddressingVersion.None);
         System.ServiceModel.Channels.Message m = service.async_getMessage(System.ServiceModel.Channels.Message.CreateMessage(ver, "http://tempuri.org/IServiceWCF/Message", reader));
}


Или не оборачивая в Envelope
XmlDocument d = new XmlDocument();
            d.PreserveWhitespace = false;
            d.Load(@"send.xml");
            MemoryStream ms = new MemoryStream();
            XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(ms);
            d.WriteTo(writer);
            writer.Flush();
 
            ms.Position = 0;

MessageVersion ver = MessageVersion.CreateVersion(EnvelopeVersion.Soap11, AddressingVersion.None);
System.ServiceModel.Channels.Message msend = System.ServiceModel.Channels.Message.CreateMessage(XmlDictionaryReader.CreateTextReader(ms, XmlDictionaryReaderQuotas.Max), int.MaxValue, ver);
msend.Headers.Action = "http://tempuri.org/IServiceWCF/Message";
System.ServiceModel.Channels.Message m =service.async_getMessage(msend);


Также я как то писал как ответное сообщения от сервиса сохранить в файл. Есть другое решение, более короткое.


System.ServiceModel.Channels.Message m =service.async_getMessage(msend);
                    MessageBuffer buf = m.CreateBufferedCopy(int.MaxValue);
 
 
                    using (var msstream = new MemoryStream())
                    {
                        using (FileStream file = new FileStream("WCF Responce.xml", FileMode.Create, System.IO.FileAccess.Write))
                        {
                            buf.WriteMessage(file);
                            file.Flush();
                        }
                    }

No comments:

Post a Comment