1 // created on 07/04/2003 at 17:16
\r
3 // System.Runtime.Serialization.Formatters.Soap.SoapFormatter
\r
6 // Jean-Marc Andre (jean-marc.andre@polymtl.ca)
\r
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System.Reflection;
\r
33 using System.Runtime.InteropServices;
\r
34 using System.Runtime.Remoting;
\r
35 using System.Runtime.Serialization;
\r
36 using System.Runtime.Remoting.Messaging;
\r
37 using System.Xml.Serialization;
\r
38 using System.Threading;
\r
39 using System.Globalization;
\r
42 namespace System.Runtime.Serialization.Formatters.Soap {
\r
43 enum RemMessageType {
\r
44 MethodCall, MethodResponse, ServerFault, NotRecognize
\r
47 public sealed class SoapFormatter: IRemotingFormatter, IFormatter {
\r
48 private SoapWriter _soapWriter;
\r
49 private SerializationBinder _binder;
\r
50 private StreamingContext _context;
\r
51 private ISurrogateSelector _selector;
\r
52 private FormatterAssemblyStyle _assemblyFormat = FormatterAssemblyStyle.Full;
\r
53 private FormatterTypeStyle _typeFormat = FormatterTypeStyle.TypesWhenNeeded;
\r
54 private ISoapMessage _topObject = null;
\r
57 TypeFilterLevel _filterLevel = TypeFilterLevel.Low;
\r
60 public SoapFormatter() {
\r
62 _context = new StreamingContext(StreamingContextStates.All);
\r
65 public SoapFormatter(ISurrogateSelector selector, StreamingContext context) {
\r
66 _selector = selector;
\r
74 public object Deserialize(Stream serializationStream) {
\r
75 return Deserialize(serializationStream, null);
\r
78 public object Deserialize(Stream serializationStream, HeaderHandler handler) {
\r
79 object objReturn = null;
\r
80 SoapReader soapReader = new SoapReader(_binder, _selector, _context);
\r
81 CultureInfo savedCi = CultureInfo.CurrentCulture;
\r
83 Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
\r
84 objReturn = soapReader.Deserialize(serializationStream, _topObject);
\r
87 Thread.CurrentThread.CurrentCulture = savedCi;
\r
94 public void Serialize(Stream serializationStream, object graph) {
\r
95 Serialize(serializationStream, graph, null);
\r
98 public void Serialize(Stream serializationStream, object graph, Header[] headers) {
\r
99 if(serializationStream == null)
\r
100 throw new ArgumentNullException("serializationStream");
\r
101 if(!serializationStream.CanWrite)
\r
102 throw new SerializationException("Can't write in the serialization stream");
\r
104 throw new ArgumentNullException("graph");
\r
105 _soapWriter = new SoapWriter(serializationStream, _selector, _context, _topObject);
\r
106 CultureInfo savedCi = CultureInfo.CurrentCulture;
\r
108 Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
\r
109 _soapWriter.Serialize (graph, headers, _typeFormat, _assemblyFormat);
\r
112 Thread.CurrentThread.CurrentCulture = savedCi;
\r
117 public ISurrogateSelector SurrogateSelector {
\r
127 public SerializationBinder Binder {
\r
136 public StreamingContext Context {
\r
145 public ISoapMessage TopObject {
\r
150 _topObject = value;
\r
155 [MonoTODO ("Interpret this")]
\r
156 [ComVisible(false)]
\r
157 public TypeFilterLevel FilterLevel {
\r
159 return _filterLevel;
\r
162 _filterLevel = value;
\r
167 public FormatterAssemblyStyle AssemblyFormat
\r
170 return _assemblyFormat;
\r
173 _assemblyFormat = value;
\r
177 public FormatterTypeStyle TypeFormat
\r
181 return _typeFormat;
\r
185 _typeFormat = value;
\r