public SendAsyncResult(UdpOutputChannel channel, Message message, AsyncCallback callback, object state) : base(callback, state) { this.channel = channel; this.messageBuffer = channel.EncodeMessage(message); try { IAsyncResult result = null; try { result = channel.socket.BeginSendTo(messageBuffer.Array, messageBuffer.Offset, messageBuffer.Count, SocketFlags.None, channel.remoteEndPoint, new AsyncCallback(OnSend), this); } catch (SocketException socketException) { throw UdpChannelHelpers.ConvertTransferException(socketException); } if (!result.CompletedSynchronously) { return; } CompleteSend(result, true); } catch { CleanupBuffer(); throw; } }
public SendAsyncResult(UdpOutputChannel channel, Message message, AsyncCallback callback, object state) : base(callback, state) { this.channel = channel; //obtain the transaction propagation token from the TransactionFlowProperty on the message byte[] txPropToken = TransactionFlowProperty.Get(message); this.messageBuffer = channel.EncodeMessage(message); txmsgBuffer = TransactionMessageBuffer.WriteTransactionMessageBuffer(txPropToken, messageBuffer); if ((long)txmsgBuffer.Length > channel.Factory.MaxPacketSize) { throw new CommunicationException("The output packet size is greater than the maximum size supported."); } try { IAsyncResult result = null; try { result = channel.socket.BeginSendTo(txmsgBuffer, 0, txmsgBuffer.Length, SocketFlags.None, channel.remoteEndPoint, new AsyncCallback(OnSend), this); } catch (SocketException socketException) { throw UdpChannelHelpers.ConvertTransferException(socketException); } if (!result.CompletedSynchronously) { return; } CompleteSend(result, true); } catch { CleanupBuffer(); throw; } }