エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 エミュレーターからローカル Web サービスに接続する方法

2014/06/18

このトピックでは、Windows Phone 8 Emulator で動作する Windows Phone アプリから、開発用コンピューター上でローカルに動作する WCF Web サービスに接続する方法について説明します。

Visual Studio で WCF Web サービスを作成すると、既定でそのサービスは IIS Express でホストされ、http://localhost/ に限って接続を受け入れます。Windows Phone OS 7.1 を対象とするアプリは、localhost として開発用コンピューターに接続できます。Windows Phone 7.1 エミュレーターが開発用コンピューターのネットワーク接続を使用するからです。ただし、Windows Phone 8 Emulator はそれ自体をネットワーク上の独立したデバイスとして構成します。その結果、Windows Phone 8 Emulator で動作するアプリは、localhost として開発用コンピューターに接続できません。

エミュレーターからローカル Web サービスに正常に接続するには、次の 2 つの変更を行う必要があります。

  • ローカル Web サービスと Web サーバーを構成して、ネットワーク上の他のデバイスからの接続を受け入れるようにします。

  • Windows Phone アプリでサービス参照を構成し、サービスが稼働している開発用コンピューターの IP アドレスを使用して、サービスに接続できるようにします。

重要:重要:

会社のドメインでは、エミュレーターはドメインに参加していない別のネットワーク デバイスとして表示されます。そのため、場合によっては、ドメインに参加している開発コンピューターで実行されているサービスにエミュレーターが参加するために、IT 部門から例外を認めてもらう必要があります。

このトピックは、次のセクションで構成されています。

ここでは、WCF Web サービスについての知識があり、IIS または IIS Express でのサービスの構成とホスティングに習熟している開発者向けに、ソリューションの簡単な要約を示します。より詳しい手順およびスクリーンショットについては、このトピックの以降のセクションと手順を参照してください。

IIS Express を使用する場合のクイック ソリューション

  1. ファイアウォールの IIS Express が使用しているポート経由の HTTP 要求を許可するファイアウォール例外を作成します。

  2. 必要に応じて ipconfig を実行し、開発用コンピューターの IP アドレスを取得します。

  3. フォルダー %USERPROFILE%\Documents\IISExpress\config\ で、IIS Express 構成ファイル applicationhost.config を確認します。USERPROFILE 環境変数の値は一般に C:\Users\<your user name> です。

  4. applicationhost.config をメモ帳などのテキスト エディターで開き、次の変更を行います。

    1. Web サービス WebServiceForTestingsite 要素を確認します。

      Web サービスの site 要素が表示されない場合は、少なくとも 1 回サービスを配置して、同要素を作成する必要があります。

    2. site要素の bindings セクションで、binding 要素をコピーし、既存の binding 要素のすぐ下にペーストして、2 番目のバインドを作成します。

    3. 新しい binding 要素で、localhost をコンピューターの IP アドレスに置き換えます。

    4. 変更内容を保存します。

  5. Visual Studio を管理者として実行し、Visual Studio ソリューションを開きます。

  6. 電話アプリ プロジェクトで、このサービスに対するサービス参照を削除します (以前追加している場合)。再構成した Web サービスに対する新しいサービス参照を追加します。

    1. [サービス参照の追加] ダイアログ ボックスの [アドレス] ボックスで、localhost を開発用コンピューターの IP アドレスに置き換えます。

    2. [移動] をクリックします。

      WCF プロジェクトでサービスの 2 番目のバインドが検出され、表示されます。

    3. [OK] をクリックします。

      開発用コンピューターの IP アドレスを使用する新しいサービス参照が Windows Phone プロジェクトに追加されます。

IIS を使用する場合のクイック ソリューション

  1. WCF サービスに Windows の機能 HTTP アクティブ化をインストールします。

  2. ファイアウォール経由で World Wide Web サービス (HTTP) を許可するためのファイアウォール例外を作成します。

  3. 必要に応じて ipconfig を実行し、開発用コンピューターの IP アドレスを取得します。

  4. Visual Studio を管理者として実行し、Visual Studio ソリューションを開きます。

  5. Web サービス プロジェクトのプロジェクト プロパティの [Web] ページで、次の変更を行います。

    1. [IIS Express を使用する] をオフにします。

    2. [URL] ボックスで、localhost を開発用コンピューターの IP アドレスに置き換えます。

    3. [仮想ディレクトリの作成] ボタンをクリックします。

    4. 変更内容を保存します。

  6. 電話アプリ プロジェクトで、このサービスに対するサービス参照を削除します (以前追加している場合)。再構成した Web サービスに対する新しいサービス参照を追加します。[サービス参照の追加] ダイアログ ボックスに表示される URL に、開発用コンピューターの IP アドレスが含まれていることがわかります。

このトピックで説明する Visual Studio ソリューションには、Visual Studio の Professional エディション以上が必要です。Visual Studio の Express エディションには、WCF プロジェクトのフル サポートが含まれていません。

Windows Phone アプリ プロジェクトと Visual Studio ソリューションをセットアップするには

  1. Visual Studio 2012 Professional 以上で、新しい Windows Phone アプリを作成します。このテストでは、プロジェクトの名前は PhoneAppForTesting です。このソリューションには 2 つのプロジェクトが含まれることになるので、ソリューションにはプロジェクトとは別の名前を付けてください。このテストでは、プロジェクトの名前は ConnectToLocalWebService です。[OK] をクリックします。

    New project dialog box
  2. [新しい Windows Phone アプリケーション] ダイアログ ボックスで、ターゲット バージョンとして [Windows Phone OS 8.0] を選択します。[OK] をクリックします。新しいソリューションと新しい Windows Phone プロジェクトが作成されます。

    New project version dialog box

WCF Web サービス プロジェクトをセットアップするには

  1. ソリューション エクスプローラーでソリューションを右クリックし、[追加] を選択し、[新しいプロジェクト] を選択します。

  2. [新しいプロジェクトの追加] ダイアログ ボックスの [インストールされているテンプレート] の一覧で、[WCF] カテゴリを選択します。

  3. WCF プロジェクト テンプレートの一覧で [WCF サービス アプリケーション] テンプレートを選択します。このテストでは、プロジェクトの名前は WebServiceForTesting です。[OK] をクリックします。

    このトピックで説明するソリューションには、WCF サービス アプリケーションというプロジェクトの種類が必要です。WCF サービス ライブラリの種類のプロジェクトは、別のホスト プロセスで動作し、このソリューションの方法で再構成することはできません。

    New WCF project dialog box

    新しい WCF サービス プロジェクトがソリューションに追加されます。

    Solution Explorer with two new projects
  4. ソリューション エクスプローラーで、サービス プロジェクトを右クリックし、[プロパティ] を選択します。

  5. プロジェクト デザイナーで [Web] をクリックして Web 設定のページを開きます。この設定から、このプロジェクトは既定により IIS Express を使用してサービスをホストし、localhost URL を使用してサービスに接続するよう構成されていることがわかります。

    Project settings using IIS Express and localhost
  6. 空の Web サービス プロジェクトを構築します。このステップをスキップすると、Windows Phone プロジェクトにサービス参照の追加を試みる段階で、エラーが発生する可能性があります。

  7. ソリューション エクスプローラーの Web サービス プロジェクトで、Service.svc を右クリックし、[ブラウザーで表示] を選択します。Web ブラウザーが起動し、サービスが認識され使用可能であることを示すページが表示されます。

    Browser page displaying the service

電話アプリ プロジェクトを Web サービスのテスト用に構成するには

  1. ソリューション エクスプローラーで、Windows Phone アプリ プロジェクトを右クリックし、[サービス参照の追加] を選択します。

  2. [サービス参照の追加] ダイアログ ボックスで [探索] をクリックし、次に [ソリューションのサービス] をクリックします。

    Add Service Reference dialog box
  3. [サービス参照の追加] ダイアログ ボックスで [OK] をクリックします。ソリューション エクスプローラーの [サービス参照] フォルダーで、Windows Phone プロジェクトにサービス参照が追加されます。

  4. MainPage.xaml で、Web サービスから返される結果を表示するための TextBlock コントロールを追加します。このテストでは、TextBlock の名前は tbWebServiceResult です。

            <!--ContentPanel - place additional content here-->
            <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                <TextBlock x:Name="tbWebServiceResult" Width="400" HorizontalAlignment="Center" VerticalAlignment="Center" TextWrapping="Wrap" FontSize="48"/>
            </Grid>
    
  5. MainPage.xaml.cs コード ファイルを開き、次のコードを追加します。このコードは、新しいサービス プロジェクトに既定で作成される GetData メソッドを呼び出して、Web サービスをテストします。

            private void TestWebService()
            {
                int testValue = 7;
    
                ServiceReference1.Service1Client clientForTesting = new ServiceReference1.Service1Client();
                clientForTesting.GetDataCompleted += new EventHandler<ServiceReference1.GetDataCompletedEventArgs>(TestCallback);
                clientForTesting.GetDataAsync(testValue);
            }
    
            private void TestCallback(object sender, ServiceReference1.GetDataCompletedEventArgs e)
            {
                this.tbWebServiceResult.Text = e.Result;
            }
    
  6. MainPage コンストラクターで InitializeComponent() の後ろに、TestWebService() メソッドを呼び出す行を追加します。

            // Constructor
            public MainPage()
            {
                InitializeComponent();
    
                TestWebService();
            }
    

ソリューションを構成する前に、エミュレーターで動作するアプリからローカル Web サービスへの接続をテストするには

  1. F5 キーを押して、エミュレーターのプロジェクトを実行します。アプリは localhost を使用して、開発用コンピューターで動作している Web サービスへの接続を試みます。2、3 秒後、アプリで例外が発生しエラーになります。通常、CommunicationException が表示されます。localhost で Web サービスが見つからないためです。

    Communication Exception error message

    [詳細の表示] リンクをクリックすると、[詳細の表示] ダイアログ ボックスが開き、次の説明が表示されます。

    The remote server returned an error: NotFound.

    Communication Exception error details
  2. Shift キーを押しながら F5 キーを押して、デバッグを停止します。

localhost アドレスに起因する接続の問題を解決するには、ネットワーク上の他のデバイスからの接続を受け入れるように Web サービス プロジェクトと IIS Express を構成します。これらのデバイスは、サービスが稼働している開発用コンピューターの IP アドレスを使用してサービスに接続します。

IIS Express に対する HTTP 要求のファイアウォール例外を作成するには

  1. Windows の [スタート] 画面から、[Windows ファイアウォール] を検索します。クリックしてプログラムを実行します。

  2. [Windows ファイアウォール] 画面で、[詳細設定] をクリックします。

  3. [セキュリティが強化された Windows ファイアウォール] 画面で、[受信の規則] を選択します。次に、[新規の規則] をクリックします。

  4. 新規の受信の規則ウイザード[規則の種類] ページで、[ポート] を選択します。[Next] (次へ) をクリックします。

  5. [プロトコルおよびポート] ページで、IIS Express が使用しているポート番号を [特定のローカルポート] フィールドに入力します。[Next] (次へ) をクリックします。

    ポート番号は、Visual Studio のプロジェクト プロパティの[Web] ページで確認できます。

    Project settings using IIS Express and localhost
  6. [アクション] ページで [接続を許可する] を選択します。[Next] (次へ) をクリックします。

  7. [プロファイル] ページで、[非公開] および [ドメイン] (該当する場合) を選択します。[公開] は選択しないでください。[Next] (次へ) をクリックします。

  8. [名前] ページで、規則の名前を入力します (例: 「テスト用ローカル Web サービス」)。[完了] をクリックします。

ネットワークからの接続を受け入れるようサービスおよび IIS Express を構成するには

  1. 開発用コンピューターで [コマンド プロンプト] ウィンドウを開き、ipconfig を実行して IP アドレスを取得します。

  2. ipconfig の出力で、IPv4 Address というキャプションの付いた行から、コンピューターの IP アドレスを書き留めておきます。

  3. 次の制限に注意してください。

    • プロジェクト プロパティの [Web] ページでは、サービスの URL が編集可能テキスト ボックスに表示されているので、サービスのアドレスを簡単に変更できるような印象を受けるかもしれません。しかし、表示された URL を http://<ip address>/ に置き換えると、仮想ディレクトリの作成を指示するプロンプトが Visual Studio によって表示されます。[はい] をクリックすると、このプロセスは失敗しエラーが発生します。

      Project settings using IIS Express and localhost
    • また、ソリューションを閉じ、.csproj プロジェクト ファイルで IISUrl 要素を手動で変更することで、URL を置き換えられるような印象を受けるかもしれません。しかし、.csproj プロジェクト ファイルで IISUrl 要素の値を手動で置き換えると、Visual Studio でプロジェクトを再び開くことはできなくなります。このエラー メッセージには次のステートメントが含まれています。

      You must specify “localhost” for the server name.

  4. 次のフォルダーで、IIS Express 構成ファイル applicationhost.config を確認します。USERPROFILE 環境変数の値は一般に C:\Users\<your user name> です。

    %USERPROFILE%\Documents\IISExpress\config\

  5. メモ帳などのテキスト エディターで、applicationhost.config を開きます。

  6. この構成ファイルで、Web サービス WebServiceForTestingsite 要素を確認します。構成ファイル内の XML 要素には、次の階層構造があります。

    <configuration>
        <application Host>
            <sites>
                <site></site>
            </sites>
        </application Host>
    </configuration>
    

    Web サービス WebServiceForTestingsite 要素は、内容が次のようになっています。Web サービスの site 要素が表示されない場合は、少なくとも 1 回サービスを配置して、同要素を作成する必要があります。

       <site name="WebServiceForTesting" id="2">
         <application path="/" applicationPool="Clr4IntegratedAppPool">
           <virtualDirectory path="/" physicalPath="D:\My Projects\ConnectToLocalWebService\WebServiceForTesting" />
         </application>
         <bindings>
           <binding protocol="http" bindingInformation="*:60661:localhost" />
         </bindings>
       </site>
    
  7. site要素の bindings セクションで、binding 要素をコピーし、既存の binding 要素のすぐ下にペーストして、2 番目のバインドを作成します。

    既定の localhost バインドを削除することはできませんが、コンピューターの IP アドレスを使用する追加のバインドを作成することはできます。

  8. 新しい binding 要素で、localhost をコンピューターの IP アドレスに置き換えます。この時点で bindings セクションの内容は次のようになります。

         <bindings>
           <binding protocol="http" bindingInformation="*:60661:localhost" />
           <binding protocol="http" bindingInformation="*:60661:<ip address>" />
         </bindings>
    
    
  9. 変更済みのファイルを保存します。

    プロジェクト プロパティの [Web] ページで URL を変更する必要はありません。このプロパティは引き続き localhost を表示しています。

    電話アプリ プロジェクトでサービス参照が Web サービスの IP アドレスを使用していることを確認するため、ServiceReferences.ClientConfig ファイルの endpoint 要素をチェックします。

  10. システム トレイで IIS Express が動作している場合は、そのアイコンを右クリックし、[終了] を選択します。変更済みの構成ファイルを読み込むため、Web サーバーを再起動する必要があります。

  11. Visual Studio がまだ開いている場合は、Visual Studio を閉じ、[管理者として実行] を選択して再度開きます。ソリューションを再度開きます。Web サービスを localhost 以外のアドレスで登録して接続するには、Visual Studio を管理者権限で実行する必要があります。

  12. 再度サービスを参照し、IIS Express を再起動します。

  13. システム トレイの [IIS Express] アイコンを右クリックして、[すべてのアプリケーションを表示] を選択します。[IIS Express] ダイアログ ボックスが開き、ソリューションで Web サービス用に設定されている 2 つのバインドが表示されます。

    IIS Express applications list with 2 bindings

IP アドレスを使用して IIS Express に接続するよう Windows Phone アプリを構成するには

  1. Visual Studio の Windows Phone プロジェクトで、[サービス参照] フォルダーのサービス参照を右クリックし、[削除] を選択します。このステップにより、localhost アドレスを使用するサービス参照が削除されます。

  2. [サービス参照の追加] ダイアログ ボックスで [探索] をクリックし、次に [ソリューションのサービス] をクリックします。

    Add Service Reference dialog box
  3. [サービス参照の追加] ダイアログ ボックスの [アドレス] ボックスで、localhost を開発用コンピューターの IP アドレスに置き換えます。次に、[Go] (Go) をクリックします。

  4. [サービス参照の追加] ダイアログ ボックスで [OK] をクリックします。開発用コンピューターの IP アドレスを使用する新しいサービス参照が Windows Phone プロジェクトに追加されます。

Internet Information Services (IIS) でサービスをホストする場合は、IIS Express でサービスをホストする場合よりも、ソリューションの構成に必要なステップ数が少なくなります。

次の手順では、開発用コンピューターに IIS がインストールされ実行中であることを前提とします。

WCF サービス HTTP アクティブ化をインストールするには

  1. Windows の [スタート] 画面から、[Windows の機能の有効化または無効化] を検索します。クリックしてプログラムを実行します。

  2. [Windows の機能] ダイアログ ボックスで、[.NET Framework 4.5 Advanced Services] を展開し、次に [WCF サービス] を展開します。

  3. [WCF サービス] で、[HTTP アクティブ化] の横にあるボックスにチェック マークを付けます。[OK] をクリックしてこの機能をインストールします。

    Installing the HTTP Activation feature

IIS に対する HTTP 要求のファイアウォール例外を作成するには

  1. Windows の [スタート] 画面から、[Windows ファイアウォールによるアプリケーションの許可] を検索します。クリックしてプログラムを実行します。

  2. [許可されたアプリ] ダイアログ ボックスで、[設定の変更] をクリックします。

  3. [強化されたアプリおよび機能] の一覧で、[World Wide Web サービス (HTTP)] の横にあるボックスにチェック マークを付け、Web サービスの呼び出しに関するファイアウォール例外を作成します。[OK] をクリックします。

    Firewall exception for World Wide Web service

ネットワークからの接続を受け入れるようサービスおよび IIS を構成するには

  1. [管理者として実行] オプションを使用して Visual Studio を起動または再起動し、ConnectToLocalWebService ソリューションを再度開きます。

  2. WCF サービス プロジェクトで、プロジェクトを右クリックし、[プロパティ] を選択します。

  3. プロジェクト デザイナーで [Web] をクリックして Web 設定のページを開きます。

  4. [IIS Express を使用する] をオフにします。[プロジェクトの URL] ボックスに表示される URL が変更されています。

  5. [URL] ボックスで、localhost を開発用コンピューターの IP アドレスに置き換えます。

    Service properties when hosted by IIS
  6. [仮想ディレクトリの作成] ボタンをクリックします。2、3 秒後、仮想ディレクトリが作成されたことを示すメッセージが表示されます。

  7. プロジェクト デザイナーで行った変更を保存します。

IP アドレスを使用して IIS に接続するよう Windows Phone アプリを構成するには

  1. Visual Studio の Windows Phone プロジェクトで、[サービス参照] フォルダーのサービス参照を右クリックし、[削除] を選択します。このステップにより、既存のサービス参照が削除されます。

  2. [サービス参照の追加] ダイアログ ボックスで [探索] をクリックし、次に [ソリューションのサービス] をクリックします。WCF プロジェクトのサービスが検出され、表示されます。URL に開発用コンピューターの IP アドレスが含まれていることがわかります。

    Discovering the service when hosted by IIS
  3. [サービス参照の追加] ダイアログ ボックスで [OK] をクリックします。開発用コンピューターの IP アドレスを使用する新しいサービス参照が Windows Phone プロジェクトに追加されます。

ソリューションを構成した後、アプリを再テストします。この時点で、アプリは開発用コンピューターでローカルに動作している WCF Web サービスを正常に検出し、接続します。

ソリューションを構成した後で、エミュレーターで動作するアプリからローカル Web サービスへの接続をテストするには

  1. F5 キーを押して、エミュレーターのプロジェクトを実行します。エミュレーターが起動し、アプリを実行します。2、3 秒後、Web サービスからの結果が表示されます。

    App running successfully in the emulator
  2. Shift キーを押しながら F5 キーを押して、デバッグを停止します。

Windows Phone 8 で動作する Internet Explorer は、Web サービスから受信する SOAP 形式または XML 形式の応答を表示することができません。電話のブラウザーを使用して SOAP 形式または XML 形式の応答を送信する Web サービスを参照すると、ブラウザーは空白の画面を表示します。

Windows Phone SDK 8.0 でツールを使用するときに回答を探して問題を解決するには、Windows Phone 開発用ツールに関するフォーラムを利用してください。Windows Phone の開発に関するすべてのフォーラムを見るには、Windows Phone 開発フォーラムにアクセスしてください。他のサポート オプションを確認するには、「MSDN のトラブルシューティングとサポート」を参照してください。

表示:
© 2014 Microsoft