3

助けてください。Web API を自己ホストしようとしています。

同じコントローラーが Web プロジェクトでホストされ、F5 を介して dev で実行されると、すべてがうまく機能します。

ただし、今は同じものを自己ホストしようとしています.411と404を取得しています.411は、Fiddlerを使用して接続すると404になり、別のライブラリを介して接続しようとすると404になります。

これは、サービスをホストすることになっているコンソール アプリです。

class Program
{        
    static int portNumber;



    static void Main(string[] args)
    {
        portNumber = 8089;

        var config = new HttpSelfHostConfiguration(
            string.Format("http://localhost:{0}", portNumber));

        config.Routes.MapHttpRoute(
                "API Default", "api/{controller}/{id}",
                new { id = RouteParameter.Optional });

        using (var server = new HttpSelfHostServer(config))
        {

            var test = new RetrieveGuidService().Execute(Unit.Instance);

            server.OpenAsync().Wait();

            Console.ReadLine();
        }
    }
}

これは私のコントローラーの外観です。何もしません。ただのテストです。

public class RetrieveGuidServiceController : ApiController
{
    public virtual Guid PostExecute(Unit request)
    {
        IQueryService<Unit,Guid> queryService = new RetrieveGuidService();
        return queryService.Execute(request);
    }
}

そして、フィドラー経由でアクセスしようとしている方法は次のとおりです。

私のフィドラーの写真

サービスが Web プロジェクトでホストされている場合も同様です。私はこのチュートリアルをほぼ文字どおりに実行しました:ナゲット スクリプトの実行、依存関係の追加などを含むasp.net WebApi セルフ ホスト チュートリアル。

私はまだ何が欠けていますか?

4

2 に答える 2

2

411 は、Content-Length ヘッダーを配置しなかったためです。コンテンツを送信していない場合でも、Content-Length: 0 を含める必要があります。

コントローラーを正しいアセンブリに配置することに関して、一貫性のない動作がありました。一部のプロジェクトでは、他のプロジェクトでは機能していないようです。何が間違っているのかわかりません。ここに、別のアセンブリ内のすべてのコントローラーを使用して Web ホストとセルフホストの両方を実行するプロジェクトがあり、問題なく動作します。

于 2013-01-12T03:10:51.430 に答える
1

デフォルトでは、サービスは、サービスをホストしているアセンブリ以外のアセンブリでコントローラーを検索しないようです。

仕様書を読んでいない限り、それは省略だと思います。

于 2013-01-11T23:07:31.507 に答える