}
}
+ internal HttpChannelListener<IReplyChannel> Source {
+ get { return source; }
+ }
+
public MessageEncoder Encoder {
get { return source.MessageEncoder; }
}
msg.Properties.Add ("Via", LocalAddress.Uri);
msg.Properties.Add (HttpRequestMessageProperty.Name, CreateRequestProperty (ctxi));
- Logger.LogMessage (MessageLogSourceKind.TransportReceive, ref msg, 0x10000); // FIXME: pass maxMessageSize.
+ Logger.LogMessage (MessageLogSourceKind.TransportReceive, ref msg, source.Source.MaxReceivedMessageSize);
context = new HttpRequestContext (this, ctxi, msg);
reqctx = context;
const string xmlns = "http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace";
static MessageLoggingSettings settings = new MessageLoggingSettings ();
static int event_id;
-#if !NET_2_1
+#if NET_2_1
+ static TextWriter log_writer = TextWriter.Null;
+#else
static readonly TraceSource source = new TraceSource ("System.ServiceModel");
static readonly TraceSource message_source = new TraceSource ("System.ServiceModel.MessageLogging");
+#endif
static Logger ()
{
+#if NET_2_1
+ // this will work only on moonlight though...
+ switch (Environment.GetEnvironmentVariable ("MOON_WCF_TRACE")) {
+ case "stdout":
+ log_writer = Console.Out;
+ break;
+ case "stderr":
+ log_writer = Console.Error;
+ break;
+ }
+#else
message_source.Switch.Level = SourceLevels.Information;
- }
#endif
+ }
#region logger methods
static void Log (TraceEventType eventType, string message, params object [] args)
{
#if NET_2_1
- Console.Error.Write ("[{0}]", event_id++);
- Console.Error.WriteLine (message, args);
+ log_writer.Write ("[{0}]", event_id++);
+ log_writer.WriteLine (message, args);
#else
source.TraceEvent (eventType, event_id++, message, args);
#endif
static readonly XmlWriterSettings xws = new XmlWriterSettings () { OmitXmlDeclaration = true };
- public static void LogMessage (MessageLogSourceKind sourceKind, ref Message msg, int maxMessageSize)
+ public static void LogMessage (MessageLogSourceKind sourceKind, ref Message msg, long maxMessageSize)
{
- var mb = msg.CreateBufferedCopy (maxMessageSize);
+ if (maxMessageSize > int.MaxValue)
+ throw new ArgumentOutOfRangeException ("maxMessageSize");
+ var mb = msg.CreateBufferedCopy ((int) maxMessageSize);
msg = mb.CreateMessage ();
LogMessage (new MessageLogTraceRecord (sourceKind, msg.GetType (), mb));
}
xw.WriteEndElement ();
xw.Close ();
#if NET_2_1
- Console.Error.Write ("[{0}]", event_id++);
- Console.Error.WriteLine (sw);
+ log_writer.Write ("[{0}]", event_id++);
+ log_writer.WriteLine (sw);
#else
message_source.TraceData (TraceEventType.Information, event_id++, doc.CreateNavigator ());
#endif