11

以下のコードを使用して、Windowsフォームアプリケーション内でWebApiサービスをセルフホストしようとしています。

namespace MascoteAquarium.Desktop
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            var config = new HttpSelfHostConfiguration("http://localhost:8080");
            config.Routes.MapHttpRoute(
                "DefaultApi", "api/{controller}/id", new { id = RouteParameter.Optional });

            using (HttpSelfHostServer server = new HttpSelfHostServer(config))
            {
                server.OpenAsync().Wait();
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmMainMenu());
        }
    }
}

やってみると

http://localhost:8080/api/*(some-controller)* 

System.Web.Http.SelfHost.HttpSelfHostServer.ProcessRequestContext(ChannelContext channelContext、RequestContext requestContext)でNullReferenceExceptionを受け取ります

誰かが何が起こっているのか知っていますか?Win Formsアプリ内でセルフホストすることは可能ですか?

4

2 に答える 2

11

問題は、プログラムの実行を維持するメイン イベント ループを含むApplication.Run(...)の直前にHttpSelfHostServerオブジェクトが失われることです。usingステートメントは、Disposeメソッドがオブジェクト (この場合はserver ) に対して呼び出されるようにするため、リクエストに応答できなくなり、発生しているNullReferenceExceptionが発生します。

例外を修正するには、コードは次のようになります。

...
using (HttpSelfHostServer server = new HttpSelfHostServer(config))
{
    server.OpenAsync().Wait();
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new frmMainMenu());
}
...
于 2013-04-05T07:52:43.240 に答える
1
  1. 昇格された特権 (管理者として) で WinForms アプリケーション (デバッガーから WinForm アプリを実行する場合は VS) を実行する必要があります。そうしないと、セルフホストはポートを開くことができません。

  2. ポート 8080 で他のアプリケーションが実行されていないことを確認します。

于 2013-01-13T17:25:45.927 に答える