Ejemplo n.º 1
0
        private void RaiseOnNewData(DataTransferMessage data)
        {
            var local = OnNewData;

            if (local != null)
            {
                local(this, new DataTransferEventArgs(data));
            }
        }
Ejemplo n.º 2
0
        private StreamData TranslateMessage(DataTransferMessage message)
        {
            var result = new StreamData
            {
                SendingEndpoint = message.SendingEndpoint,
                Data            = message.Data,
            };

            return(result);
        }
Ejemplo n.º 3
0
        private DataTransferMessage TranslateMessage(StreamData data)
        {
            // copy the stream here because WCF automatically closes streams
            // see here: http://stackoverflow.com/a/6681478/539846
            var stream = new MemoryStream();

            data.Data.CopyTo(stream);
            stream.Position = 0;

            var result = new DataTransferMessage
            {
                SendingEndpoint = data.SendingEndpoint,
                Data            = stream,
            };

            return(result);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Sends the given message.
        /// </summary>
        /// <param name="message">The message to be send.</param>
        /// <param name="maximumNumberOfRetries">The maximum number of times the endpoint will try to transfer the data if delivery fails.</param>
        public void Send(DataTransferMessage message, int maximumNumberOfRetries)
        {
            var v1Message = TranslateMessage(message);

            SendMessage(v1Message, maximumNumberOfRetries);
        }
Ejemplo n.º 5
0
        public void SendWithNoChannel()
        {
            var text   = "Hello world.";
            var data   = new MemoryStream();
            var writer = new StreamWriter(data);

            writer.Write(text);
            writer.Flush();
            data.Position = 0;

            var systemDiagnostics = new SystemDiagnostics((p, s) => { }, null);
            var sendingEndpoint   = new EndpointId("a");
            var msg = new DataTransferMessage
            {
                SendingEndpoint = sendingEndpoint,
                Data            = data,
            };

            bool hasBeenInvoked = false;
            Func <StreamData, StreamReceptionConfirmation> handler =
                s =>
            {
                hasBeenInvoked = true;
                Assert.AreEqual(sendingEndpoint, s.SendingEndpoint);

                var storedText = new StreamReader(s.Data).ReadToEnd();
                Assert.AreEqual(text, storedText);
                return(new StreamReceptionConfirmation
                {
                    WasDataReceived = true,
                });
            };
            var receiver = new MockDataReceivingEndpoint(handler);

            var uri  = new Uri("net.pipe://localhost/test/pipe");
            var host = new ServiceHost(receiver, uri);

            var binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None)
            {
                MaxReceivedMessageSize = CommunicationConstants.DefaultBindingMaxReceivedSizeForMessagesInBytes,
                TransferMode           = TransferMode.Streamed,
            };
            var address = string.Format("{0}_{1}", "ThroughNamedPipe", Process.GetCurrentProcess().Id);

            host.AddServiceEndpoint(typeof(IDataReceivingEndpoint), binding, address);
            host.Faulted += (s, e) => Assert.Fail();

            host.Open();
            try
            {
                var configuration = new Mock <IConfiguration>();
                {
                    configuration.Setup(c => c.HasValueFor(It.IsAny <ConfigurationKey>()))
                    .Returns(false);
                }

                var localAddress = string.Format("{0}/{1}", uri.OriginalString, address);
                var template     = new NamedPipeProtocolChannelTemplate(configuration.Object, new ProtocolDataContractResolver());
                var sender       = new RestoringDataTransferingEndpoint(
                    new Uri(localAddress),
                    template,
                    systemDiagnostics);

                sender.Send(msg, 1);
                Assert.IsTrue(hasBeenInvoked);
            }
            finally
            {
                host.Close();
            }
        }