private void RaiseOnNewData(DataTransferMessage data) { var local = OnNewData; if (local != null) { local(this, new DataTransferEventArgs(data)); } }
private StreamData TranslateMessage(DataTransferMessage message) { var result = new StreamData { SendingEndpoint = message.SendingEndpoint, Data = message.Data, }; return(result); }
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); }
/// <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); }
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(); } }