Skip to content

Commit 213e27b

Browse files
committed
update code
1 parent 7fd2c7a commit 213e27b

File tree

2 files changed

+56
-91
lines changed

2 files changed

+56
-91
lines changed

framework/wcf/Extensibility/MessageEncoder/Compression/CS/GZipEncoder/GZipMessageEncoderFactory.cs

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -12,69 +12,54 @@ namespace Microsoft.Samples.GZipEncoder
1212
//This class is used to create the custom encoder (GZipMessageEncoder)
1313
internal class GZipMessageEncoderFactory : MessageEncoderFactory
1414
{
15-
MessageEncoder encoder;
15+
private readonly MessageEncoder _encoder;
1616

1717
//The GZip encoder wraps an inner encoder
1818
//We require a factory to be passed in that will create this inner encoder
1919
public GZipMessageEncoderFactory(MessageEncoderFactory messageEncoderFactory)
2020
{
2121
if (messageEncoderFactory == null)
2222
throw new ArgumentNullException("messageEncoderFactory", "A valid message encoder factory must be passed to the GZipEncoder");
23-
encoder = new GZipMessageEncoder(messageEncoderFactory.Encoder);
23+
_encoder = new GZipMessageEncoder(messageEncoderFactory.Encoder);
2424
}
2525

2626
//The service framework uses this property to obtain an encoder from this encoder factory
27-
public override MessageEncoder Encoder
28-
{
29-
get { return encoder; }
30-
}
27+
public override MessageEncoder Encoder => _encoder;
3128

32-
public override MessageVersion MessageVersion
33-
{
34-
get { return encoder.MessageVersion; }
35-
}
29+
public override MessageVersion MessageVersion => _encoder.MessageVersion;
3630

3731
//This is the actual GZip encoder
38-
class GZipMessageEncoder : MessageEncoder
32+
private class GZipMessageEncoder : MessageEncoder
3933
{
40-
static string GZipContentType = "application/x-gzip";
34+
private const string GZipContentType = "application/x-gzip";
4135

4236
//This implementation wraps an inner encoder that actually converts a WCF Message
4337
//into textual XML, binary XML or some other format. This implementation then compresses the results.
4438
//The opposite happens when reading messages.
4539
//This member stores this inner encoder.
46-
MessageEncoder innerEncoder;
40+
private readonly MessageEncoder _innerEncoder;
4741

4842
//We require an inner encoder to be supplied (see comment above)
4943
internal GZipMessageEncoder(MessageEncoder messageEncoder)
5044
: base()
5145
{
5246
if (messageEncoder == null)
5347
throw new ArgumentNullException("messageEncoder", "A valid message encoder must be passed to the GZipEncoder");
54-
innerEncoder = messageEncoder;
48+
_innerEncoder = messageEncoder;
5549
}
5650

57-
public override string ContentType
58-
{
59-
get { return GZipContentType; }
60-
}
51+
public override string ContentType => GZipContentType;
6152

62-
public override string MediaType
63-
{
64-
get { return GZipContentType; }
65-
}
53+
public override string MediaType => GZipContentType;
6654

6755
//SOAP version to use - we delegate to the inner encoder for this
68-
public override MessageVersion MessageVersion
69-
{
70-
get { return innerEncoder.MessageVersion; }
71-
}
56+
public override MessageVersion MessageVersion => _innerEncoder.MessageVersion;
7257

7358
//Helper method to compress an array of bytes
74-
static ArraySegment<byte> CompressBuffer(ArraySegment<byte> buffer, BufferManager bufferManager, int messageOffset)
59+
private static ArraySegment<byte> CompressBuffer(ArraySegment<byte> buffer, BufferManager bufferManager, int messageOffset)
7560
{
7661
MemoryStream memoryStream = new MemoryStream();
77-
62+
7863
using (GZipStream gzStream = new GZipStream(memoryStream, CompressionMode.Compress, true))
7964
{
8065
gzStream.Write(buffer.Array, buffer.Offset, buffer.Count);
@@ -93,7 +78,7 @@ static ArraySegment<byte> CompressBuffer(ArraySegment<byte> buffer, BufferManage
9378
}
9479

9580
//Helper method to decompress an array of bytes
96-
static ArraySegment<byte> DecompressBuffer(ArraySegment<byte> buffer, BufferManager bufferManager)
81+
private static ArraySegment<byte> DecompressBuffer(ArraySegment<byte> buffer, BufferManager bufferManager)
9782
{
9883
MemoryStream memoryStream = new MemoryStream(buffer.Array, buffer.Offset, buffer.Count);
9984
MemoryStream decompressedStream = new MemoryStream();
@@ -130,7 +115,7 @@ public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager buf
130115
//Decompress the buffer
131116
ArraySegment<byte> decompressedBuffer = DecompressBuffer(buffer, bufferManager);
132117
//Use the inner encoder to decode the decompressed buffer
133-
Message returnMessage = innerEncoder.ReadMessage(decompressedBuffer, bufferManager);
118+
Message returnMessage = _innerEncoder.ReadMessage(decompressedBuffer, bufferManager);
134119
returnMessage.Properties.Encoder = this;
135120
return returnMessage;
136121
}
@@ -139,7 +124,7 @@ public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager buf
139124
public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
140125
{
141126
//Use the inner encoder to encode a Message into a buffered byte array
142-
ArraySegment<byte> buffer = innerEncoder.WriteMessage(message, maxMessageSize, bufferManager, 0);
127+
ArraySegment<byte> buffer = _innerEncoder.WriteMessage(message, maxMessageSize, bufferManager, 0);
143128
//Compress the resulting byte array
144129
return CompressBuffer(buffer, bufferManager, messageOffset);
145130
}
@@ -150,14 +135,14 @@ public override Message ReadMessage(System.IO.Stream stream, int maxSizeOfHeader
150135
//This will ensure that the inner stream gets closed when the message gets closed, which
151136
//will ensure that resources are available for reuse/release.
152137
GZipStream gzStream = new GZipStream(stream, CompressionMode.Decompress, false);
153-
return innerEncoder.ReadMessage(gzStream, maxSizeOfHeaders);
138+
return _innerEncoder.ReadMessage(gzStream, maxSizeOfHeaders);
154139
}
155140

156141
public override void WriteMessage(Message message, System.IO.Stream stream)
157142
{
158143
using (GZipStream gzStream = new GZipStream(stream, CompressionMode.Compress, true))
159144
{
160-
innerEncoder.WriteMessage(message, gzStream);
145+
_innerEncoder.WriteMessage(message, gzStream);
161146
}
162147

163148
// innerEncoder.WriteMessage(message, gzStream) depends on that it can flush data by flushing

framework/wcf/Extensibility/MessageEncoder/Compression/CS/GZipEncoder/GZipMessageEncodingBindingElement.cs

Lines changed: 38 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -11,80 +11,63 @@
1111
namespace Microsoft.Samples.GZipEncoder
1212
{
1313
// This is constants for GZip message encoding policy.
14-
static class GZipMessageEncodingPolicyConstants
14+
internal static class GZipMessageEncodingPolicyConstants
1515
{
1616
public const string GZipEncodingName = "GZipEncoding";
1717
public const string GZipEncodingNamespace = "http://schemas.microsoft.com/ws/06/2004/mspolicy/netgzip1";
1818
public const string GZipEncodingPrefix = "gzip";
1919
}
2020

2121
//This is the binding element that, when plugged into a custom binding, will enable the GZip encoder
22-
#if NET462_OR_GREATER
23-
public sealed class GZipMessageEncodingBindingElement
24-
: MessageEncodingBindingElement //BindingElement
25-
, IPolicyExportExtension
26-
#elif NET6_0_OR_GREATER
2722
public sealed class GZipMessageEncodingBindingElement
2823
: MessageEncodingBindingElement //BindingElement
24+
#if NET462_OR_GREATER
25+
, IPolicyExportExtension
2926
#endif
3027
{
3128

32-
//We will use an inner binding element to store information required for the inner encoder
33-
MessageEncodingBindingElement innerBindingElement;
29+
//By default, use the default text encoder as the inner encoder
30+
public GZipMessageEncodingBindingElement()
31+
: this(new TextMessageEncodingBindingElement()) { }
3432

35-
//By default, use the default text encoder as the inner encoder
36-
public GZipMessageEncodingBindingElement()
37-
: this(new TextMessageEncodingBindingElement()) { }
33+
public GZipMessageEncodingBindingElement(MessageEncodingBindingElement messageEncoderBindingElement) => InnerMessageEncodingBindingElement = messageEncoderBindingElement;
3834

39-
public GZipMessageEncodingBindingElement(MessageEncodingBindingElement messageEncoderBindingElement)
40-
{
41-
this.innerBindingElement = messageEncoderBindingElement;
42-
}
43-
44-
public MessageEncodingBindingElement InnerMessageEncodingBindingElement
45-
{
46-
get { return innerBindingElement; }
47-
set { innerBindingElement = value; }
48-
}
35+
//We will use an inner binding element to store information required for the inner encoder
36+
public MessageEncodingBindingElement InnerMessageEncodingBindingElement { get; set; }
4937

50-
//Main entry point into the encoder binding element. Called by WCF to get the factory that will create the
51-
//message encoder
52-
public override MessageEncoderFactory CreateMessageEncoderFactory()
53-
{
54-
return new GZipMessageEncoderFactory(innerBindingElement.CreateMessageEncoderFactory());
55-
}
38+
//Main entry point into the encoder binding element. Called by WCF to get the factory that will create the
39+
//message encoder
40+
public override MessageEncoderFactory CreateMessageEncoderFactory() => new GZipMessageEncoderFactory(InnerMessageEncodingBindingElement.CreateMessageEncoderFactory());
5641

57-
public override MessageVersion MessageVersion
58-
{
59-
get { return innerBindingElement.MessageVersion; }
60-
set { innerBindingElement.MessageVersion = value; }
61-
}
42+
public override MessageVersion MessageVersion
43+
{
44+
get => InnerMessageEncodingBindingElement.MessageVersion;
45+
set => InnerMessageEncodingBindingElement.MessageVersion = value;
46+
}
6247

63-
public override BindingElement Clone()
64-
{
65-
return new GZipMessageEncodingBindingElement(this.innerBindingElement);
66-
}
48+
public override BindingElement Clone() => new GZipMessageEncodingBindingElement(this.InnerMessageEncodingBindingElement);
6749

68-
public override T GetProperty<T>(BindingContext context)
69-
{
70-
if (typeof(T) == typeof(XmlDictionaryReaderQuotas))
50+
public override T GetProperty<T>(BindingContext context)
7151
{
72-
return innerBindingElement.GetProperty<T>(context);
52+
if (typeof(T) == typeof(XmlDictionaryReaderQuotas))
53+
{
54+
return InnerMessageEncodingBindingElement.GetProperty<T>(context);
55+
}
56+
else
57+
{
58+
return base.GetProperty<T>(context);
59+
}
7360
}
74-
else
61+
62+
public override IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)
7563
{
76-
return base.GetProperty<T>(context);
77-
}
78-
}
64+
if (context == null)
65+
throw new ArgumentNullException("context");
7966

80-
public override IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)
81-
{
82-
if (context == null)
83-
throw new ArgumentNullException("context");
67+
context.BindingParameters.Add(this);
68+
return context.BuildInnerChannelFactory<TChannel>();
69+
}
8470

85-
context.BindingParameters.Add(this);
86-
return context.BuildInnerChannelFactory<TChannel>();
87-
}
8871
#if NET462_OR_GREATER
8972
public override IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)
9073
{
@@ -117,7 +100,7 @@ void IPolicyExportExtension.ExportPolicy(MetadataExporter exporter, PolicyConver
117100
GZipMessageEncodingPolicyConstants.GZipEncodingNamespace));
118101
}
119102
#endif
120-
}
103+
}
121104

122105
#if NET462_OR_GREATER
123106
//This class is necessary to be able to plug in the GZip encoder binding element through
@@ -129,18 +112,15 @@ public GZipMessageEncodingElement()
129112
}
130113

131114
//Called by the WCF to discover the type of binding element this config section enables
132-
public override Type BindingElementType
133-
{
134-
get { return typeof(GZipMessageEncodingBindingElement); }
135-
}
115+
public override Type BindingElementType => typeof(GZipMessageEncodingBindingElement);
136116

137117
//The only property we need to configure for our binding element is the type of
138118
//inner encoder to use. Here, we support text and binary.
139119
[ConfigurationProperty("innerMessageEncoding", DefaultValue = "textMessageEncoding")]
140120
public string InnerMessageEncoding
141121
{
142-
get { return (string)base["innerMessageEncoding"]; }
143-
set { base["innerMessageEncoding"] = value; }
122+
get => (string)base["innerMessageEncoding"];
123+
set => base["innerMessageEncoding"] = value;
144124
}
145125

146126
//Called by the WCF to apply the configuration settings (the property above) to the binding element

0 commit comments

Comments
 (0)