8

製品に付属のSDKを使用する代わりに、USBデバイス用に独自のコントローラーを作成しようとしています(SDKは標準以下だと思います)。

USBデバイスは、このアプリケーションが実行されているのと同じサーバーに接続されています。

そこで、Nugetにアクセスして、HidLibraryを取得することにしました。

PM>インストール-パッケージ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;
    }

私はそれが何かばかげたことであり、IISワーカーから直接USBデバイスに接続することに関するいくつかの取引を破る許可の問題ではないことを望んでいます。

4

3 に答える 3

10

愚かなことをしたいというあなたの希望にもかかわらず、そうではありません。取引を破る許可の問題がいくつかあります。HidライブラリのGitHubからMikeO'Brienのコードを参照すると、kernel32.dll、setupapi.dll、user32.dll、hid.dll( Native.cs )にあるWin32API関数が呼び出されていることがわかります。

列挙自体は、setupapi.dll関数を介して行われます。インストールされているすべてのデバイスを参照し、必要なものをフィルタリングします。

ですから...匿名認証を使用してIISのWebアプリから直接kernel32.dllコードを実行することはセキュリティの問題だと思いますね。

そのHID(温度センサーなどを知っている)と本当に通信する必要がある場合は、別のWindowsサービスを実行し、IISでホストされているWebアプリがWCFを介してこのサービスと通信します。このサービスはプロキシが必要です。

于 2012-11-28T15:20:46.643 に答える
5

同じコードをコンソールアプリケーションに入れて実行します。これは、それがコードなのか環境なのかを確認するのに役立ちます。

環境の場合は、Process Monitorを使用して、非表示のアクセスエラーがあるかどうかを確認してください。また、ASP.NETで実行できるかどうかを確認するために、探している1つのデバイスを探すだけでなく、すべてのデバイスを列挙してみてください。

于 2012-11-28T00:00:14.870 に答える
1

@Chase、これが実験でない限り、IISプロセスからデバイスへの接続を試みないことが最善です。[この道を歩み始めると、パンドラの箱になります]。

これを行うための最良の方法は、デバイスへのプロキシとして別の(WCF)サービスを用意し、サービスから必要なものだけを公開して、アプリに接続することです。それが役立つと思われる場合は、お気軽に例をお尋ねください。

私は@garzantiを+1します。

于 2012-12-03T21:20:59.560 に答える