Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/System.ServiceModel/System.ServiceModel.Channels/TcpDuplexSessionChannel.cs')
-rw-r--r--mcs/class/System.ServiceModel/System.ServiceModel.Channels/TcpDuplexSessionChannel.cs19
1 files changed, 18 insertions, 1 deletions
diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Channels/TcpDuplexSessionChannel.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Channels/TcpDuplexSessionChannel.cs
index 0d712191604..4f294b9358f 100644
--- a/mcs/class/System.ServiceModel/System.ServiceModel.Channels/TcpDuplexSessionChannel.cs
+++ b/mcs/class/System.ServiceModel/System.ServiceModel.Channels/TcpDuplexSessionChannel.cs
@@ -69,6 +69,7 @@ namespace System.ServiceModel.Channels
bool is_service_side;
TcpBinaryFrameManager frame;
TcpDuplexSession session; // do not use this directly. Use Session instead.
+ EndpointAddress counterpart_address;
public TcpDuplexSessionChannel (ChannelFactoryBase factory, TcpChannelInfo info, EndpointAddress address, Uri via)
: base (factory, address, via)
@@ -79,6 +80,7 @@ namespace System.ServiceModel.Channels
// make sure to acquire TcpClient here.
int explicitPort = Via.Port;
client = new TcpClient (Via.Host, explicitPort <= 0 ? TcpTransportBindingElement.DefaultPort : explicitPort);
+ counterpart_address = GetEndpointAddressFromTcpClient (client);
}
public TcpDuplexSessionChannel (ChannelListenerBase listener, TcpChannelInfo info, TcpClient client)
@@ -87,12 +89,27 @@ namespace System.ServiceModel.Channels
is_service_side = true;
this.client = client;
this.info = info;
+ counterpart_address = GetEndpointAddressFromTcpClient (client);
}
-
+
+ EndpointAddress GetEndpointAddressFromTcpClient (TcpClient client)
+ {
+ IPEndPoint ep = (IPEndPoint) client.Client.RemoteEndPoint;
+ return new EndpointAddress (new Uri ("net.tcp://" + ep));
+ }
+
public MessageEncoder Encoder {
get { return info.MessageEncoder; }
}
+ public override EndpointAddress RemoteAddress {
+ get { return base.RemoteAddress ?? counterpart_address; }
+ }
+
+ public override EndpointAddress LocalAddress {
+ get { return base.LocalAddress ?? counterpart_address; }
+ }
+
public IDuplexSession Session {
get {
if (session == null)