0

自己署名SSL証明書で保護したい自己ホスト型WCFサービスを実行しています。これを機能させるには、このSSL証明書を特定のポートにバインドする必要があります。それを行うにはいくつかの方法があります。

  1. このhttp://msdn.microsoft.com/en-us/library/ms733791.aspxによると、使用できnetsh、機能しますが、netshに依存せず、.NETコードからすべてを実行したいと思います。

  2. だから私は次のスニペットを見つけました:

        using (ServerManager manager = new ServerManager())
        {
            Site site = manager.Sites.FirstOrDefault(i => i.Applications.Cast<Application>().Any());
            Application app = site.Applications.Cast<Application>().First();
            site.Bindings.Add(":*:PORTN", cert.GetCertHash(), store.Name);
            manager.CommitChanges();
        }
    

動作しますが、IISをインストールする必要がありました。そうしないと、次の例外が発生します。

CLSID {2B72133B-3F5B-4602-8952-803546CE3344}のコンポーネントのCOMクラスファクトリの取得は、次のエラーのために失敗しました:80040154クラスが登録されていません(HRESULTからの例外:0x80040154(REGDB_E_CLASSNOTREG))。

だから、質問は-マネージコード内でこれを達成する方法はありますが、IISをインストールする必要はありませんか?

4

2 に答える 2

1

私の質問に対する正しい答えが見つかりました:プログラムで SSL 証明書をポートにバインドする

などのマネージド クラスを使用する代わりにServerManager、P/Invoking ネイティブ API に依存する必要がありますHttpSetServiceConfiguration

于 2013-01-16T20:21:21.107 に答える
0

IIS をインストールせずにマネージ コード内でこれを達成する方法はありますか?

はい。NETSH を呼び出して、必要に応じて Process.Start と WaitForExit を使用して許可と禁止を行うのに十分な特権を持つサービスとして実行されており、質問で必要なものを達成できます。

NETSHのコマンド ライン構文http://technet.microsoft.com/en-us/library/cc725882(WS.10).aspxを使用すると、必要なすべての操作を実行できます。

すべての P/Invoke を把握したいが、余分な手間がかかるように思えますが、それはメモリ リークなどのリスクが高い学術的な演習のように思えます。

Windows XP を実行していて、NETSH が必要な処理を行っていないことが心配な場合は、Microsoft の HTTPCFG をhttp://msdn.microsoft.com/en-us/library/windows/desktop/aa364478%28v=から入手することもできます。 vs.85%29.aspx

于 2013-01-16T14:17:39.993 に答える