6

私は新しいWCFプログラミングです。次のリンクから、一連の入門チュートリアルに従いました。

http://msdn.microsoft.com/en-us/library/ms734712.aspx

コンソールアプリケーションでサービスをホストしましたが、クライアントを作成してサービス参照を追加しようとすると、次の例外が発生しました。

'http:localhost:8000 / GettingStarted / mex / _vti_bin / ListData.svc /$metadata'のダウンロード中にエラーが発生しました。リクエストはHTTPステータス405:メソッドは許可されていませんで失敗しました。メタデータに解決できない参照が含まれています:'http:localhost:8000 / GettingStarted/mex'。メッセージを受け入れることができるhttp:localhost:8000 / GettingStarted/mexでリッスンしているエンドポイントはありませんでした。これは多くの場合、誤ったアドレスまたはSOAPアクションが原因で発生します。詳細については、InnerException(存在する場合)を参照してください。リモートサーバーがエラーを返しました:(404)見つかりません。サービスが現在のソリューションで定義されている場合は、ソリューションを構築して、サービス参照を再度追加してみてください。

ホスティングアプリケーションのコード

class Program
{
    static void Main(string[] args)
    {
        // Step 1 Create a URI to serve as the base address.
        Uri baseAddress = 
            new Uri("http://localhost:8000/GettingStarted/");

        // Step 2 Create a ServiceHost instance
        ServiceHost selfHost = 
            new ServiceHost(typeof(CalculatorService), baseAddress);

        try
        {
            // Step 3 Add a service endpoint.
            selfHost.AddServiceEndpoint(typeof(ICalculator), 
                new WSHttpBinding(), 
                "CalculatorService");

            // Step 4 Enable metadata exchange.
            var smb = new ServiceMetadataBehavior();
            smb.HttpGetEnabled = true;
            selfHost.Description.Behaviors.Add(smb);

            // Step 5 Start the service.
            selfHost.Open();
            Console.WriteLine("The service is ready.");
            Console.WriteLine("Press <ENTER> to terminate.");
            Console.WriteLine();
            Console.ReadLine();

            // Close the ServiceHostBase to shutdown.
            selfHost.Close();
        }
        catch (CommunicationException ce)
        {
            Console.WriteLine("exception: {0}", ce.Message);
            selfHost.Abort();
        }
    }
}

今、私は問題が何であるかを理解することができません。VisualStudio2012と.netプラットフォーム4.5を使用しています。

4

8 に答える 8

8

私も同様の問題を抱えていました。はい、チュートリアルに正しく従ったようですが、それに接続してサービスとして使用する場合 (サービス参照の作成など)、MEX サービス エンドポイントも追加する必要があります。selfhost.Description.Behaviors.Add(smb) の後に次の行を追加します。

selfhost.AddServiceEndpoint(
            typeof(IMetadataExchange),
            MetadataExchangeBindings.CreateMexHttpBinding(),
            "http://localhost:8000/GettingStarted/mex");

これにより、「サービス参照の追加」を介して接続できるようになります。また、システムによっては、VS を管理者として実行して、ネットワークへの接続を許可する必要がある場合もあります (過去に誤ってノーと言った場合)。

于 2012-10-26T19:41:35.200 に答える
0

エラーメッセージから判断すると、指定されたポートでリッスンしているサービスがないようです。サービス参照を追加する場合は、サービスをホストするコンソールアプリケーションを実行する必要があります。

于 2012-10-26T19:01:02.183 に答える
0

MEX エンドポイントを定義しましたか? これは、スタジオがクライアント プロキシを生成できるように、サービスに関するメタデータ情報を提供するものです。

リンク先のチュートリアルでは、このビットです

// Step 4 Enable metadata exchange.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
于 2012-10-26T19:27:42.217 に答える
0

明らかに、サービスは実行されていません。これは、サービス参照の作成に使用している URL でリッスンしているエンドポイントがないことを意味します。

IIS でサービスをホストするか、上記の Damir のようにコンソール アプリケーションを実行し続けることができます。

于 2012-10-26T19:07:30.153 に答える
0

サーバーにアクセスしようとするときは、サーバーが実行されていることを確認してください。また、サーバーの構成を確認し、クライアントのエンドポイントがサーバーのエンドポイントと一致していることを確認してください。同時に、同じバインディングを使用していることを確認してください。サーバーがリッスンしており、サーバーのファイアウォールがブロックしていないことを確認してください。WCF サービスに変更を加えた場合は、クライアント アプリケーションのサービス参照を再生成することを忘れないでください。

于 2012-10-26T19:12:00.830 に答える
0

IIS で Web サービスをホストしている場合は、web.config をチェックインします (動作セクションの下)。

httpsGetEnabled が True に設定されている

于 2013-05-28T20:36:13.223 に答える