次の方法で共有


Windows Communication Foundation の入門チュートリアルに関するトラブルシューティング

この記事では、「チュートリアル: Windows Communication Foundation アプリケーションの概要」に記載された手順を実行したときに発生する可能性のある最も一般的な問題とエラーの解決方法について説明します。

一般的な問題

ハード ドライブ上のプロジェクト ファイルが見つからない。

Visual Studio では、プロジェクト ファイルは "C:\Users\<ユーザー名>\source\repos" に保存されます。

Svcutil.exe によって生成された App.config ファイルが見つからない。

Visual Studio では、 [既存項目の追加] ウィンドウに、既定で次の拡張子を持つファイルのみが表示されます。

  • .cs
  • .resx
  • .settings
  • .xsd
  • .wsdl

すべてのファイルの種類を表示するには、[既存項目の追加] ウィンドウの右下にあるドロップダウン リストで [すべてのファイル (*.*)] を選択します。

一般的なエラー

サービス アプリケーションのコンパイル

エラー BC30420 'Sub Main' が 'GettingStartedHost.Module1' に見つかりませんでした。

Visual Basic アプリケーションのエントリ ポイントが正しくありません。 次のように変更してください。

  1. ソリューション エクスプローラー ウィンドウで、GettingStartedHost フォルダーを選択した後、ショートカット メニューの [プロパティ] をクリックします。 a. [GettingStartedHost] ウィンドウの [スタートアップ オブジェクト]Service.Program (または特定のアプリケーションのエントリ ポイント) を選択します。 b. メイン メニューから、[ファイル]>[すべて保存] の順に選択します。

サービス アプリケーションの実行

HTTP が URL 'http://+:8000/GettingStarted/CalculatorService' を登録できませんでした。 プロセスにこの名前空間へのアクセス権がありません。

適切にアクセスするには、Windows Communication Foundation (WCF) サービスをホストするプロセスを管理者特権で開始します。

  • Visual studio の場合: [スタート] メニューの Visual Studio プログラムを選択してから、ショートカット メニューの [その他]>[管理者として実行] を選択します。
  • コンソール ウィンドウの場合: [スタート] メニューの [コマンド プロンプト] を選択してから、ショートカット メニューの [その他]>[管理者として実行] を選択します。
  • Windows エクスプローラーの場合: 実行可能ファイルを選択してから、ショートカットメニューの [管理者として実行] を選択します。

クライアント アプリケーションのコンパイル

'CalculatorClient' に '<method name>' の定義が含まれておらず、型 'CalculatorClient' の最初の引数を受け付ける拡張メソッド '<method name>' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)

ServiceOperationAttribute 属性でマークされたメソッドだけが公開されます。 ICalculator インターフェイスのメソッドで ServiceOperationAttribute 属性を省略すると、コンパイル中にこのエラー メッセージが表示されます。

型または名前空間の名前 'CalculatorClient' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)

GeneratedProxy.cs (または generatedProxy.vb) ファイルを Svcutil.exe ツールで生成した際、クライアント プロジェクトに追加しなかった場合にこのエラーが発生します。

クライアント アプリケーションを実行する

ハンドルされない例外: System.ServiceModel.EndpointNotFoundException: 'http://localhost:8000/GettingStarted/CalculatorService' に接続できませんでした。 TCP エラー コード 10061: 対象のコンピューターによって拒否されたため、接続できませんでした。

最初にサービスを開始せずにクライアント アプリケーションを実行した場合にこのエラーが発生します。 最初にホスト アプリケーションを実行してサービスを開始してから、クライアント アプリケーションを実行してください。

Svcutil.exe ツールの使用

'Svcutil' が内部または外部コマンド、操作可能プログラム、またはバッチ ファイルとして認識されません。

Svcutil.exe がシステム パス内に存在する必要があります。 最も簡単な解決方法は、Visual Studio のコマンド プロンプトを使用することです。 [スタート] メニューから [Visual Studio <バージョン>] ディレクトリを選択し、[開発者コマンド プロンプト for VS <バージョン>] を選択します。 このコマンド プロンプトにより、Visual Studio の一部として提供されているすべてのツールの正しい場所にシステム パスが設定されます。

サービスおよびクライアント アプリケーションの実行

System.ServiceModel.Security.SecurityNegotiationException: ターゲット 'http://localhost:8000/GettingStarted/CalculatorService' の 'http://localhost:8000/GettingStarted/CalculatorService' との SOAP セキュリティ ネゴシエーションに失敗しました

ドメインに参加しているコンピューターにネットワーク接続がない場合にこのエラーが発生します。 コンピューターをネットワークに接続するか、サービスとクライアントの両方のセキュリティをオフにしてください。

セキュリティをオフにするには:

  • サービスの場合は、WSHttpBinding を作成するコードを次のコードに置き換えます。

    // Step 3: Add a service endpoint.
    selfhost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(SecurityMode.None), "CalculatorService");  
    
  • クライアントの場合は、構成ファイルで、<binding> 要素の下の <security> 要素を次のように更新します。

    <binding name="WSHttpBinding_ICalculator">
      <security mode="None" />
    </binding>
    

関連項目

WCF アプリケーションの概要
WCF トラブルシューティング クイックスタート
セットアップに関する問題のトラブルシューティング