我们可以访问http://localhost/MyWeb/trace.axd
中的所有默认跟踪消息但是如何将自己的自定义错误/日志消息写入此跟踪。我试过了
System.Diagnostics.Trace.Write()
但是在此跟踪屏幕中看不到我的消息。
有人可以建议我如何编写和查看我自己的跟踪消息。
我在WCF_RIA服务中试过这个,我是从LightSwitch的Silverlight客户端调用的。
答案 0 :(得分:2)
我们目前正在使用以下方法写入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");
要查看这些分类的跟踪,您需要包含" CustomCategory"在web.config的Microsoft.LightSwitch.Trace.Categories部分中,例如:
<!-- 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小组的博客帖子Diagnosing Problems in a Deployed 3-Tier LightSwitch Application (Eric Erhardt)所述,您需要考虑web.config中的以下设置才能启用跟踪日志:
虽然此诊断子系统用于跟踪服务器请求的操作和服务器对每个操作的响应,但它也可以通过向客户端提供服务器端端点来强制跟踪客户端操作。服务器端跟踪方法。
提供此选项的一个选项是实现ASP.NET Web API控制器端点并从LightSwitch客户端调用此端点。以下LightSwitch团队博客文章提供了实现此类端点的概述:
虽然这些博客文章涵盖了一般细节,但在这种特殊情况下,可以使用以下基本步骤:
实施WebAPI端点
按照以下行对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的新项目(选择Web \ General \ Global Application 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);
});
}