74 lines
2.4 KiB
C#
74 lines
2.4 KiB
C#
|
// <copyright>
|
|||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|||
|
// </copyright>
|
|||
|
|
|||
|
namespace System.ServiceModel.Channels
|
|||
|
{
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Diagnostics.CodeAnalysis;
|
|||
|
using System.Globalization;
|
|||
|
using System.Net;
|
|||
|
using System.Net.Sockets;
|
|||
|
using System.Runtime;
|
|||
|
using System.Runtime.Diagnostics;
|
|||
|
using System.ServiceModel.Diagnostics;
|
|||
|
using System.Threading;
|
|||
|
using System.Xml;
|
|||
|
|
|||
|
internal class ClientUdpOutputChannel : UdpOutputChannel
|
|||
|
{
|
|||
|
private EndpointAddress to;
|
|||
|
|
|||
|
public ClientUdpOutputChannel(ChannelManagerBase factory, IPEndPoint remoteEndPoint, MessageEncoder encoder, BufferManager bufferManager, UdpSocket[] sendSockets, UdpRetransmissionSettings retransmissionSettings, EndpointAddress to, Uri via, bool isMulticast)
|
|||
|
: base(factory, encoder, bufferManager, sendSockets, retransmissionSettings, via, isMulticast)
|
|||
|
{
|
|||
|
Fx.Assert(to != null, "to address can't be null for this constructor...");
|
|||
|
Fx.Assert(remoteEndPoint != null, "remoteEndPoint can't be null");
|
|||
|
|
|||
|
this.RemoteEndPoint = remoteEndPoint;
|
|||
|
this.to = to;
|
|||
|
}
|
|||
|
|
|||
|
public IPEndPoint RemoteEndPoint
|
|||
|
{
|
|||
|
get;
|
|||
|
private set;
|
|||
|
}
|
|||
|
|
|||
|
protected override UdpSocket[] GetSendSockets(Message message, out IPEndPoint remoteEndPoint, out Exception exceptionToBeThrown)
|
|||
|
{
|
|||
|
UdpSocket[] socketList = null;
|
|||
|
remoteEndPoint = this.RemoteEndPoint;
|
|||
|
exceptionToBeThrown = null;
|
|||
|
|
|||
|
if (this.IsMulticast)
|
|||
|
{
|
|||
|
// always send on all sockets...
|
|||
|
socketList = this.SendSockets;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Fx.Assert(this.SendSockets.Length == 1, "Unicast Send socket list on client should always be 1 item long");
|
|||
|
socketList = this.SendSockets;
|
|||
|
}
|
|||
|
|
|||
|
return socketList;
|
|||
|
}
|
|||
|
|
|||
|
protected override void AddHeadersTo(Message message)
|
|||
|
{
|
|||
|
Fx.Assert(message != null, "Message can't be null");
|
|||
|
|
|||
|
if (message.Version.Addressing != AddressingVersion.None)
|
|||
|
{
|
|||
|
this.to.ApplyTo(message);
|
|||
|
}
|
|||
|
|
|||
|
message.Properties.Via = this.Via;
|
|||
|
|
|||
|
base.AddHeadersTo(message);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|