因为我的SSMS组装过程停止工作,我需要添加一些日志。但是,因为我是新来的,我有很大的问题,如何做到这一点,以及在哪里我可以看到这个日志。
正如你在上面的StoredProcedures类中看到的,我运行了WSClient类,它应该向WebSocket服务器发送一些数据。我想在这里添加一些console.log,并检查它是否正在运行。但我不知道该怎么做。
我的程序看起来:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void HelloWorld(String value)
{
Microsoft.SqlServer.Server.SqlMetaData columnInfo
= new Microsoft.SqlServer.Server.SqlMetaData("VALUE", SqlDbType.NVarChar, Max);
SqlDataRecord greetingRecord
= new SqlDataRecord(new Microsoft.SqlServer.Server.SqlMetaData[] { columnInfo });
//logs is working ok, displays what I need, and this is ok
greetingRecord.SetString(0, value);
SqlContext.Pipe.Send(greetingRecord);
var ws = new WSClient();
// how to inspect WSClient and where I could see it????
WSClient.runWSClient(value).GetAwaiter().GetResult();
}
}
public class WSClient
{
public static async Task runWSClient(String value)
{
using (ClientWebSocket client = new ClientWebSocket())
{
Uri servicesUri = new Uri("wss://websocket.kawczynski.eu");
var cTs = new CancellationTokenSource();
cTs.CancelAfter(TimeSpan.FromSeconds(120));
try
{
await client.ConnectAsync(servicesUri, cTs.Token);
if (client.State == WebSocketState.Open)
{
string message = value;
//SqlContext.Pipe.Send("ws client got message: " + message);
if (!string.IsNullOrEmpty(message))
{
ArraySegment<byte> byteToSend = new ArraySegment<byte>(Encoding.UTF8.GetBytes(message));
await client.SendAsync(byteToSend, WebSocketMessageType.Text, true, cTs.Token);
}
}
}
catch (WebSocketException e)
{
//SqlContext.Pipe.Send("error from hello world assembly: " + e.Message);
Console.WriteLine(e.Message);
}
}
}
}
1条答案
按热度按时间mbyulnm01#
对于类似的问题,你可以有不同的方法,
例如,我会尝试在存储过程中编写一个正确的结构,这样您就可以在问题到达代码之前轻松捕获它。
例如,你可以这样构造你的存储过程:
使用此代码,错误将被引发,直到您自己的调用者代码的“catch块”。
此外,您可以在这个“catch块”中放置一个小语句,将错误插入数据库的表中,因此错误被保存,
类似于简单的“插入dbo.Log values(errorMsg)(@ERROR_MESSAGE)”