RemoteServiceTraceListenerを使用するときにWriteを呼び出すと、LogEntryはサーバーに送信されるリストに配置されます。頻繁にタイマーが実行され、リスト内の項目がサーバーに送信されます。 SendImmediatelyがTrueに設定されている場合でも、これが発生します。 SendImmediatelyをTrueに設定すると、タイマーコールバックは約1秒後に起動します。
したがって、再起動を実行すると、アプリケーションをサーバーに送信する前にアプリケーションを破棄している可能性があります。メッセージがIsolated Storageに保存され、再起動後にサーバーに返送されることを期待していましたが、それは起こっていないようです。
私はあなたが望むと思うように動作させることができましたが、ちょっと面倒です - おそらくもっと簡単な方法がありますか?
まず、LoggingServiceFactoryのインスタンスを作成し、コールバックを設定してアプリのURLに移動します。
public static class LogHelper
{
public static void Write(LogEntry logEntry)
{
// Factory is not configured so set config name
var factory = EnterpriseLibraryContainer.Current.GetInstance<LoggingServiceFactory>();
factory.EndpointConfigurationName = "CustomBinding_ILoggingService";
var proxy = factory.CreateChannel();
proxy.Write(logEntry,() =>
{
// Set callback Action
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
System.Windows.Browser.HtmlPage.Window.Navigate(
new Uri("http://localhost/app.aspx"));
});
});
}
}
public static class ILoggingServiceExtension
{
public static void Write(this ILoggingService proxy, LogEntry logEntry, Action action)
{
LogEntryMessage[] messages = new LogEntryMessage[] { logEntry.ToLogEntryMessage() };
proxy.BeginAdd(messages, r =>
{
try
{
proxy.EndAdd(r);
if (action != null)
action();
}
finally
{
if (proxy != null)
{
((IDisposable)proxy).Dispose();
}
}
}, null);
}
}
そしてLogHelperを介してメッセージを書く:
var logEntry = new LogEntry() { Message = "Test", Categories = { "default"} };
LogHelper.Write(logEntry);
、あなたがhttp://entlib.codeplex.com/discussions/topics/4923/silverlight-integrationの下に質問を投稿したい場合がありますがEntLibエンジニアの専任のチームがあなたを助けることができる場所。 –