Microsoft LightSwitch - 如何在 trace.axd 中编写我自己的自定义消息
Microsoft LightSwitch - How to write my own custom message in trace.axd
我们可以访问 http://localhost/MyWeb/trace.axd
中的所有默认跟踪消息
但是我如何将自己的自定义 error/logging 消息写入此跟踪。我试过了
System.Diagnostics.Trace.Write()
但在此跟踪屏幕中看不到我的消息。
任何人都可以建议我如何编写和查看我自己的跟踪消息。
我在从 LightSwitch 的 Silverlight 客户端调用的 WCF_RIA 服务中尝试了这个。
我们目前正在使用以下方法写入 LightSwitch trace.axd 日志:
Microsoft.LightSwitch.Trace.TraceInformation("test info");
Microsoft.LightSwitch.Trace.TraceError(new Exception("test exception"));
TraceError 很有用,因为您可以轻松传递捕获的异常,并且它在 trace.axd 报告中以红色突出显示。
我们还通过提供可选的类别参数对跟踪进行分类,如下所示:-
Microsoft.LightSwitch.Trace.TraceInformation("CustomCategory", "test info");
为了查看这些分类跟踪,您需要在 web.config 的 Microsoft.LightSwitch.Trace.Categories 部分中包含 "CustomCategory",例如:
<!-- The semicolon-separated list of categories that will be enabled at the specified trace level -->
<add key="Microsoft.LightSwitch.Trace.Categories" value="Microsoft.LightSwitch;CustomCategory" />
如 LightSwitch 团队的博客 post Diagnosing Problems in a Deployed 3-Tier LightSwitch Application (Eric Erhardt) 所述,您需要在 web.config 中考虑以下设置才能启用跟踪日志:
- Microsoft.LightSwitch.Trace.Enabled
- Microsoft.LightSwitch.Trace.LocalOnly
- Microsoft.LightSwitch.Trace.Level
- Microsoft.LightSwitch.Trace.Sensitive
- Microsoft.LightSwitch.Trace.Categories
虽然此诊断子系统旨在跟踪服务器请求的操作以及服务器对每个操作的响应,但也可以通过向客户端提供服务器端点来强制跟踪客户端操作侧描方法。
提供此功能的一个选项是实现 ASP.NET Web API 控制器端点并从 LightSwitch 客户端调用它。以下 LightSwitch 团队博客 post 提供了实现此类端点的概述:
- Calling Stored Procs in your LightSwitch Databases using Web API
- Calling ASP.NET Web API from a LightSwitch Silverlight Client
虽然这些博客 post 涵盖了一般细节,但在这种特殊情况下,可以使用以下基本步骤:
实施 WebAPI 端点
- 用鼠标右键单击服务器项目并添加一个名为 api
的文件夹
- 右键单击这个新的 api 文件夹并添加一个名为 [=102= 的新项目(select Web\Web API 控制器 Class) ]
按照以下行在 TraceController 中对端点进行编码:
public class TraceController : ApiController
{
[HttpGet]
[Route("api/Trace/Information/{message}")]
public void Information(string message)
{
using (var sac = ServerApplicationContext.CreateContext())
{
Microsoft.LightSwitch.Trace.TraceInformation(message);
}
}
}
用鼠标右键单击服务器项目并添加一个名为 Global.asax[=20= 的新项目(select Web\General\Global 应用程序 Class) ]
在Global.asax的Application_Start方法中实现如下配置:
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configure(config =>
{
config.MapHttpAttributeRoutes();
});
}
}
从 LightSwitch HTML 客户端
调用 WebAPI 端点的快速示例
var message = encodeURIComponent("Hello JavaScript World");
var url = "../api/Trace/Information/" + message;
$.ajax({
type: "GET",
url: url,
context: document.body
});
从 LightSwitch Silverlight 客户端调用 WebAPI 端点的快速示例
Microsoft.LightSwitch.Threading.Dispatchers.Main.BeginInvoke(async () =>
{
System.Net.WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.BrowserHttp);
System.Net.WebRequest.RegisterPrefix("https://", System.Net.Browser.WebRequestCreator.BrowserHttp);
var message = "Hello Silverlight World";
var uri = new Uri(System.Windows.Application.Current.Host.Source, "/api/Trace/Information/" + message);
var request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(uri);
request.BeginGetResponse(ac => { }, null);
});
}
我们可以访问 http://localhost/MyWeb/trace.axd
中的所有默认跟踪消息但是我如何将自己的自定义 error/logging 消息写入此跟踪。我试过了
System.Diagnostics.Trace.Write()
但在此跟踪屏幕中看不到我的消息。
任何人都可以建议我如何编写和查看我自己的跟踪消息。
我在从 LightSwitch 的 Silverlight 客户端调用的 WCF_RIA 服务中尝试了这个。
我们目前正在使用以下方法写入 LightSwitch trace.axd 日志:
Microsoft.LightSwitch.Trace.TraceInformation("test info");
Microsoft.LightSwitch.Trace.TraceError(new Exception("test exception"));
TraceError 很有用,因为您可以轻松传递捕获的异常,并且它在 trace.axd 报告中以红色突出显示。
我们还通过提供可选的类别参数对跟踪进行分类,如下所示:-
Microsoft.LightSwitch.Trace.TraceInformation("CustomCategory", "test info");
为了查看这些分类跟踪,您需要在 web.config 的 Microsoft.LightSwitch.Trace.Categories 部分中包含 "CustomCategory",例如:
<!-- The semicolon-separated list of categories that will be enabled at the specified trace level -->
<add key="Microsoft.LightSwitch.Trace.Categories" value="Microsoft.LightSwitch;CustomCategory" />
如 LightSwitch 团队的博客 post Diagnosing Problems in a Deployed 3-Tier LightSwitch Application (Eric Erhardt) 所述,您需要在 web.config 中考虑以下设置才能启用跟踪日志:
- Microsoft.LightSwitch.Trace.Enabled
- Microsoft.LightSwitch.Trace.LocalOnly
- Microsoft.LightSwitch.Trace.Level
- Microsoft.LightSwitch.Trace.Sensitive
- Microsoft.LightSwitch.Trace.Categories
虽然此诊断子系统旨在跟踪服务器请求的操作以及服务器对每个操作的响应,但也可以通过向客户端提供服务器端点来强制跟踪客户端操作侧描方法。
提供此功能的一个选项是实现 ASP.NET Web API 控制器端点并从 LightSwitch 客户端调用它。以下 LightSwitch 团队博客 post 提供了实现此类端点的概述:
- Calling Stored Procs in your LightSwitch Databases using Web API
- Calling ASP.NET Web API from a LightSwitch Silverlight Client
虽然这些博客 post 涵盖了一般细节,但在这种特殊情况下,可以使用以下基本步骤:
实施 WebAPI 端点
- 用鼠标右键单击服务器项目并添加一个名为 api 的文件夹
- 右键单击这个新的 api 文件夹并添加一个名为 [=102= 的新项目(select Web\Web API 控制器 Class) ]
按照以下行在 TraceController 中对端点进行编码:
public class TraceController : ApiController { [HttpGet] [Route("api/Trace/Information/{message}")] public void Information(string message) { using (var sac = ServerApplicationContext.CreateContext()) { Microsoft.LightSwitch.Trace.TraceInformation(message); } } }
用鼠标右键单击服务器项目并添加一个名为 Global.asax[=20= 的新项目(select Web\General\Global 应用程序 Class) ]
在Global.asax的Application_Start方法中实现如下配置:
public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { GlobalConfiguration.Configure(config => { config.MapHttpAttributeRoutes(); }); } }
从 LightSwitch HTML 客户端
调用 WebAPI 端点的快速示例var message = encodeURIComponent("Hello JavaScript World");
var url = "../api/Trace/Information/" + message;
$.ajax({
type: "GET",
url: url,
context: document.body
});
从 LightSwitch Silverlight 客户端调用 WebAPI 端点的快速示例
Microsoft.LightSwitch.Threading.Dispatchers.Main.BeginInvoke(async () =>
{
System.Net.WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.BrowserHttp);
System.Net.WebRequest.RegisterPrefix("https://", System.Net.Browser.WebRequestCreator.BrowserHttp);
var message = "Hello Silverlight World";
var uri = new Uri(System.Windows.Application.Current.Host.Source, "/api/Trace/Information/" + message);
var request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(uri);
request.BeginGetResponse(ac => { }, null);
});
}