如何从ASP.NET应用程序中连接到服务器端USB(HID)设备?

Cha*_*ell 8 c# asp.net usb hid

我正在尝试为USB设备编写自己的控制器,而不是使用产品附带的SDK(我觉得sdk低于标准杆).

USB设备已插入运行此应用程序的SAME SERVER.

所以我决定前往Nuget并抓住HidLibrary

PM> Install-Package hidlibrary

然后我继续按照GitHub上的例子进行操作.

首先,我进入控制面板验证VendorID和ProductID

VendorID和ProductID

我将它放入我的代码中.

然后我在抓住设备的线路上设置断点,但不幸的是它总是回来null.

using HidLibrary;
public class MyController : ApiController
{

    private const int VendorId = 0x0BC7;
    private const int ProductId = 0x0001;

    private static HidDevice _device;

    // POST api/<controller>
    public string Post(CommandModel command)
    {

        _device = HidDevices.Enumerate(VendorId, ProductId).FirstOrDefault();

        if (_device != null)
        {
            // getting here means the device exists
        }
        else
        {
            // ending up here means the device doesn't exist
            throw new Exception("device not connected");
        }
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

我希望它是愚蠢的,而不是直接从IIS工作者连接到USB设备的一些突破性权限问题.

gar*_*nti 10

尽管你希望成为愚蠢的东西,但事实并非如此.您有一些突破性的权限问题.如果您将从Hid库的GitHub浏览Mike O'Brien的代码,您将看到它调用位于以下内容的Win32 API函数:kernel32.dll,setupapi.dll,user32.dll,hid.dll(Native.cs).

枚举本身是通过setupapi.dll函数完成的.它浏览所有已安装的设备并过滤所需的设备.

所以...我认为使用匿名身份验证直接从IIS中的Web应用程序执行kernel32.dll代码是一个安全问题,不是吗?

如果你真的需要与那个HID(谁知道它可能是温度传感器或其他东西)进行通信,我会做一个单独的Windows服务,IIS托管的Web应用程序将通过WCF与此服务进行通信.这项服务想要代理.


Sam*_*eff 5

将相同的代码放在控制台应用程序中并运行它.这将帮助您验证它是您的代码还是环境.

如果是环境,请尝试使用Process Monitor查看是否存在任何隐藏的访问错误.还要尝试枚举所有设备,而不仅仅是寻找你所追求的设备,只是为了看看你是否可以在ASP.NET中实现它.