You've already forked linux-packaging-mono
Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
This commit is contained in:
174
external/referencesource/System.ServiceModel/System/ServiceModel/Channels/TransportOutputChannel.cs
vendored
Normal file
174
external/referencesource/System.ServiceModel/System/ServiceModel/Channels/TransportOutputChannel.cs
vendored
Normal file
@ -0,0 +1,174 @@
|
||||
//------------------------------------------------------------
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------
|
||||
|
||||
namespace System.ServiceModel.Channels
|
||||
{
|
||||
using System.Collections.Generic;
|
||||
using System.ServiceModel;
|
||||
using System.Diagnostics;
|
||||
using System.Xml;
|
||||
using System.Runtime.Diagnostics;
|
||||
using System.Runtime;
|
||||
|
||||
abstract class TransportOutputChannel : OutputChannel
|
||||
{
|
||||
bool anyHeadersToAdd;
|
||||
bool manualAddressing;
|
||||
MessageVersion messageVersion;
|
||||
EndpointAddress to;
|
||||
Uri via;
|
||||
ToHeader toHeader;
|
||||
EventTraceActivity channelEventTraceActivity;
|
||||
|
||||
protected TransportOutputChannel(ChannelManagerBase channelManager, EndpointAddress to, Uri via, bool manualAddressing, MessageVersion messageVersion)
|
||||
: base(channelManager)
|
||||
{
|
||||
this.manualAddressing = manualAddressing;
|
||||
this.messageVersion = messageVersion;
|
||||
this.to = to;
|
||||
this.via = via;
|
||||
|
||||
if (!manualAddressing && to != null)
|
||||
{
|
||||
Uri toUri;
|
||||
if (to.IsAnonymous)
|
||||
{
|
||||
toUri = this.messageVersion.Addressing.AnonymousUri;
|
||||
}
|
||||
else if (to.IsNone)
|
||||
{
|
||||
toUri = this.messageVersion.Addressing.NoneUri;
|
||||
}
|
||||
else
|
||||
{
|
||||
toUri = to.Uri;
|
||||
}
|
||||
|
||||
if (toUri != null)
|
||||
{
|
||||
XmlDictionaryString dictionaryTo = new ToDictionary(toUri.AbsoluteUri).To;
|
||||
this.toHeader = ToHeader.Create(toUri, dictionaryTo, messageVersion.Addressing);
|
||||
}
|
||||
|
||||
this.anyHeadersToAdd = to.Headers.Count > 0;
|
||||
}
|
||||
|
||||
if (FxTrace.Trace.IsEnd2EndActivityTracingEnabled)
|
||||
{
|
||||
this.channelEventTraceActivity = EventTraceActivity.GetFromThreadOrCreate();
|
||||
}
|
||||
}
|
||||
|
||||
protected bool ManualAddressing
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.manualAddressing;
|
||||
}
|
||||
}
|
||||
|
||||
public MessageVersion MessageVersion
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.messageVersion;
|
||||
}
|
||||
}
|
||||
|
||||
public override EndpointAddress RemoteAddress
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.to;
|
||||
}
|
||||
}
|
||||
|
||||
public override Uri Via
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.via;
|
||||
}
|
||||
}
|
||||
|
||||
public EventTraceActivity EventTraceActivity
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.channelEventTraceActivity;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void AddHeadersTo(Message message)
|
||||
{
|
||||
base.AddHeadersTo(message);
|
||||
|
||||
if (toHeader != null)
|
||||
{
|
||||
// we don't use to.ApplyTo(message) since it's faster to cache and
|
||||
// use the actual <To> header then to call message.Headers.To = Uri...
|
||||
message.Headers.SetToHeader(toHeader);
|
||||
if (anyHeadersToAdd)
|
||||
{
|
||||
to.Headers.AddHeadersTo(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ToDictionary : IXmlDictionary
|
||||
{
|
||||
XmlDictionaryString to;
|
||||
|
||||
public ToDictionary(string to)
|
||||
{
|
||||
this.to = new XmlDictionaryString(this, to, 0);
|
||||
}
|
||||
|
||||
public XmlDictionaryString To
|
||||
{
|
||||
get
|
||||
{
|
||||
return to;
|
||||
}
|
||||
}
|
||||
|
||||
public bool TryLookup(string value, out XmlDictionaryString result)
|
||||
{
|
||||
if (value == null)
|
||||
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
|
||||
if (value == to.Value)
|
||||
{
|
||||
result = to;
|
||||
return true;
|
||||
}
|
||||
result = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool TryLookup(int key, out XmlDictionaryString result)
|
||||
{
|
||||
if (key == 0)
|
||||
{
|
||||
result = to;
|
||||
return true;
|
||||
}
|
||||
result = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool TryLookup(XmlDictionaryString value, out XmlDictionaryString result)
|
||||
{
|
||||
if (value == null)
|
||||
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
|
||||
if (value == to)
|
||||
{
|
||||
result = to;
|
||||
return true;
|
||||
}
|
||||
result = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user