我正在尝试实现一个C#Web套接字服务器,但它给了我一些麻烦.我正在运行一个Web服务器(ASP.NET)来托管带有javascript的页面,而Web套接字服务器则是作为C#控制台应用程序实现的.
我能够检测来自客户端的连接尝试(运行javascript的chrome)以及从客户端检索握手.但是客户端似乎不接受我发回的握手(onopenWeb套接字上的函数永远不会被调用).
我一直在阅读The Web Socket协议,我看不出我做错了什么.下面是一些服务器代码:
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8181);
listener.Bind(ep);
listener.Listen(100);
Console.WriteLine("Wainting for connection...");
Socket socketForClient = listener.Accept();
if (socketForClient.Connected)
{
Console.WriteLine("Client connected");
NetworkStream networkStream = new NetworkStream(socketForClient);
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);
System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream);
//read handshake from client:
Console.WriteLine("HANDSHAKING...");
char[] shake = new char[255];
streamReader.Read(shake, 0, 255);
string handshake =
"HTTP/1.1 101 Web Socket Protocol Handshake\r\n" +
"Upgrade: WebSocket\r\n" +
"Connection: Upgrade\r\n" + …Run Code Online (Sandbox Code Playgroud) 当ref调用带有我订阅的参数的.NET事件时,PowerShell崩溃.
我已将问题减少到以下代码.
.净:
namespace PSEventTest
{
public delegate void BadHandler(ref string str);
public class PSEventTest
{
public event BadHandler BadEvent;
public void InvokeBad()
{
var handler = BadEvent;
if (handler != null)
{
var str = "bad";
handler(ref str);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
电源外壳:
Add-Type -path $PSScriptRoot"\PSEventTest.dll"
$obj = New-Object PSEventTest.PSEventTest
$bad = Register-ObjectEvent -InputObject $obj -EventName BadEvent -Action {
Write-Host "bad!" # it also crashes if this script-block is empty
}
$obj.InvokeBad(); # crash
Run Code Online (Sandbox Code Playgroud)
当我运行PowerShell脚本时,我得到了这个:

如果我按Debug …
我正在努力研究一些仿制药.以下是我的设置:
interface I<T> { }
[...]
void Add<T>(T obj) where T : I<??> { }
Run Code Online (Sandbox Code Playgroud)
我如何能确保T在Add方法实现I?
我正在努力学习SQL语句.
我想在具有复合主键的表中更新除某些行之外的所有行.
这就是我现在所做的:
UPDATE Products SET Active = 0
Run Code Online (Sandbox Code Playgroud)
_
UPDATE Products SET Active = 1
WHERE (Id_A = 1 AND Id_B = 1 AND Id_C = 1) OR
(Id_A = 1 AND Id_B = 2 AND Id_C = 1) OR
(Id_A = 5 AND Id_B = 8 AND Id_C = 3) OR
.
.
.
etc
Run Code Online (Sandbox Code Playgroud)
这有效,但我不喜欢它.我希望能够一次性去做.
有没有办法在SQL中执行此操作?
我正在尝试将类型存储在集合中,以便稍后我可以实例化集合中类型的对象.但我不知道如何以最好的方式做到这一点.
到目前为止我有什么:
List<Type> list = new List<Type>();
list.Add(typeof(MyClass));
var obj = (MyClass)Activator.CreateInstance(list[0]);
Run Code Online (Sandbox Code Playgroud)
我希望Type在集合中有一些约束,或者更好,只是集合中的泛型类型而不是实例化Type对象.这可能吗?
c# ×3
generics ×2
.net ×1
collections ×1
constraints ×1
events ×1
except ×1
powershell ×1
sql ×1
websocket ×1