导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

如何从 Windows Phone 8 模拟器连接到本地 Web 服务

2014/6/18

本主题介绍如何从在 Windows Phone 8 模拟器 上运行的 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 模拟器 将在网络上作为独立设备对其本身进行配置。因此,在 Windows Phone 8 模拟器 上运行的应用无法与作为 localhost 的开发计算机连接。

在您可以顺利地从模拟器连接至本地 Web 服务之前,您应作出两项更改:

  • 您必须配置本地 Web 服务和 Web 服务器,以便接受来自网络上其他设备的连接。

  • 您必须配置 Windows Phone 应用中的服务引用,以便通过使用服务正在运行于上的开发计算机的 IP 地址连接至服务。

重要说明重要说明:

在企业域中,模拟器显示为未加入域的单独网络设备。因此,您可能还需要从 IT 部门获取例外授权,然后才能将模拟器连接至在已加入域的开发计算机上运行的服务。

本主题包括以下部分。

本节为熟悉 WCF Web 服务而且熟悉用 IIS 或 IIS Express 配置与承载服务的人提供解决方案的快速摘要。有关更加详细的步骤和屏幕快照,请参见本主题中的后续部分和过程。

使用 IIS Express 的快速解决方案

  1. 创建防火墙例外以允许 HTTP 请求通过 IIS Express 正在使用的端口的防火墙。

  2. 如有必要,通过运行 ipconfig 来获取开发计算机的 IP 地址。

  3. 找到 IIS Express 的配置文件 applicationhost.config,它位于文件夹 %USERPROFILE%\Documents\IISExpress\config\USERPROFILE 环境变量通常具有 C:\Users\<your user name> 值。

  4. 使用记事本或其他文本编辑器打开 applicationhost.config,并作出以下更改。

    1. 找出 Web 服务 WebServiceForTestingsite 元素。

      如果您未看到 web 服务的 site 元素,则至少必须部署一次服务才能创建该元素。

    2. site 元素的 bindings 部分中,复制 binding 元素并将副本直接粘贴在现有的 binding 元素下面,以创建第二个绑定。

    3. 在新的 binding 元素中,用计算机的 IP 地址替换 localhost

    4. 保存更改。

  5. 以管理员身份运行 Visual Studio,打开 Visual Studio 解决方案。

  6. 在手机应用项目中,移除对该服务的服务引用(如果您之前添加了它)。添加对重新配置后的 Web 服务的新服务引用。

    1. “添加服务引用”对话框的“地址”框中,用您的开发计算机的 IP 地址替换 localhost

    2. 单击“转到”

      WCF 项目中的服务的第二个绑定被发现并显示出来。

    3. 单击“确定”。

      使用开发计算机 IP 地址的新服务引用被添加至 Windows Phone 项目。

使用 IIS 的快速解决方案

  1. 为 WCF 服务安装 Windows 功能 HTTP 激活

  2. 创建防火墙例外以允许万维网服务 (HTTP) 通过防火墙。

  3. 如有必要,通过运行 ipconfig 来获取开发计算机的 IP 地址。

  4. 以管理员身份运行 Visual Studio,打开 Visual Studio 解决方案。

  5. 在 Web 服务项目中,在项目属性的 Web 页面上作出以下更改:

    1. 取消选定“使用 IIS Express”选项。

    2. URL 文本框中,用开发计算机的 IP 地址替换 localhost

    3. 单击“创建虚拟目录”按钮。

    4. 保存更改。

  6. 在手机应用项目中,移除对该服务的服务引用(如果您之前添加了它)。添加对重新配置后的 Web 服务的新服务引用。请注意,在“添加服务引用”对话框中显示的 URL 包括开发计算机的 IP 地址。

本主题所介绍的 Visual Studio 解决方案要求 Visual Studio 专业版或更高版本。Visual Studio 速成版不包括对 WCF 项目的完全支持。

设置 Windows Phone 应用项目和 Visual Studio 解决方案的步骤

  1. 在 Visual Studio 2012 Professional 或更高版本中创建新的 Windows Phone 应用。在该测试中,该项目名为 PhoneAppForTesting。为解决方案提供项目之外的另一个名称,因为它将包含两个项目。在该测试中,该解决方案名为 ConnectToLocalWebService。单击“确定”。

    New project dialog box
  2. “新建 Windows Phone 应用程序”对话框中,选择 Windows Phone OS 8.0 作为目标版本。单击“确定”。新的解决方案和新的 Windows Phone 项目创建完成。

    New project version dialog box

设置 WCF Web 服务项目的步骤

  1. 在解决方案资源管理器中,右击该解决方案,选择“添加”,然后选择“新建项目”

  2. “添加新建项目”对话框的已安装的模板列表中,选择 WCF 类别。

  3. 在 WCF 项目模板列表中,选择 “WCF 服务应用程序”模板。在该测试中,该项目名为 WebServiceForTesting。单击“确定”。

    本主题所介绍的解决方案要求 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. “添加服务引用”对话框中,单击“确定”。服务引用被添加至解决方案中“服务引用”文件夹内的 Windows Phone 项目。

  4. 在 MainPage.xaml 上,添加 TextBlock 控件以显示 Web 服务返回的结果。在该测试中,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 服务。几秒钟后,应用出现异常。通常您将看到 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. “新建入站规则向导”“规则类型”页面中,选择“端口”。然后,单击“下一步”。

  5. “协议和端口”页面的“特定本地端口”字段中,输入 IIS Express 正在使用的端口号。然后,单击“下一步”。

    您可以在 Visual Studio 中项目属性的 Web 页面找到端口号。

    Project settings using IIS Express and localhost
  6. “操作”页面中选择“允许连接”。然后,单击“下一步”。

  7. “配置文件”页面中选择“私有”“域”(如果可用)。请勿选择“公共”。然后,单击“下一步”。

  8. “名称”页面中,键入规则名称,例如用于测试的本地 Web 服务。然后,单击“完成”

配置服务和 IIS Express 以接受来自网络的连接的步骤

  1. 在开发计算机上,打开“命令提示”窗口,并运行 ipconfig 以获取您的 IP 地址。

  2. ipconfig 输出中,记下标题为 IPv4 Address 的输出行中的您的 IP 地址。

  3. 请注意下面的局限。

    • 您可能可以轻松地在项目属性的 Web 页面上为服务更改地址,服务的 URL 显示在该页面里的可编辑文本框中。但是,如果您用 http://<ip address>/ 替换所显示的 URL,那么 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 元素,则至少必须部署一次服务才能创建该元素。

       <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 元素下面,以创建第二个绑定。

    虽然您无法移除默认的 localhost 绑定,但是您可以创建另外的使用计算机 IP 地址的绑定。

  8. 在新的 binding 元素中,用计算机的 IP 地址替换 localhost。现在 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,再选择“以管理员身份运行”,重新打开它。重新打开该解决方案。若要在 localhost 之外的地址注册和连接至 Web 服务,您应通过管理员权限运行 Visual Studio。

  12. 再次浏览服务以重启 IIS Express。

  13. 右击系统任务栏中的 IIS Express 图标,然后选择“显示所有应用程序”。IIS Express 对话框打开并显示解决方案中 Web 服务的两个绑定。

    IIS Express applications list with 2 bindings

配置 Windows Phone 应用以通过 IP 地址连接至 IIS Express 的步骤

  1. 在 Visual Studio 中,在 Windows Phone 项目中,右击“服务引用”文件夹内的服务引用,然后选择“删除”。该步骤将移除使用 localhost 地址的服务引用。

  2. “添加服务引用”对话框中,单击“发现”,然后单击“解决方案中的服务”

    Add Service Reference dialog box
  3. “添加服务引用”对话框的“地址”框中,用您的开发计算机的 IP 地址替换 localhost。然后,单击“开始”。

  4. “添加服务引用”对话框中,单击“确定”。使用开发计算机 IP 地址的新服务引用被添加至 Windows Phone 项目。

用 Internet 信息服务 (IIS) 承载服务时,配置解决方案的步骤少于用 IIS Express 承载服务时的步骤。

以下过程假设 IIS 已安装而且在您的开发计算机上运行。

为 WCF 服务安装 HTTP 激活的步骤

  1. 从 Windows“开始”屏幕搜索“打开或关闭 Windows 功能”。单击以运行程序。

  2. “Windows 功能”对话框中,展开“.NET Framework 4.5 高级服务”,然后展开“WCF 服务”

  3. “WCF 服务”下面,勾选“HTTP 激活”旁边的框。单击“确定”以安装该功能。

    Installing the HTTP Activation feature

为对 IIS 的 HTTP 请求创建防火墙例外的步骤

  1. 从 Windows“开始”屏幕搜索“允许应用通过防火墙”。单击以运行程序。

  2. “允许的应用”对话框中,单击“更改设置”

  3. “允许的应用和功能列表”中,勾选“万维网服务 (HTTP)”旁边的框,为 Web 服务调用创建防火墙例外。单击“确定”。

    Firewall exception for World Wide Web service

配置服务和 IIS 以接受来自网络的连接的步骤

  1. 通过“以管理员身份运行”选项启动或重启 Visual Studio,重新打开 ConnectToLocalWebService 解决方案。

  2. 在 WCF 服务项目中,右击项目并选择“属性”

  3. 在项目设计器中,单击 Web 以打开 Web 设置页面。

  4. 取消选定“使用 IIS Express”选项。在“项目 URL”文本框中显示的 URL 发生更改。

  5. URL 文本框中,用开发计算机的 IP 地址替换 localhost

    Service properties when hosted by IIS
  6. 单击“创建虚拟目录”按钮。几秒钟后,消息显示虚拟目录已创建。

  7. 保存在项目设计器中进行的更改。

配置 Windows Phone 应用以通过 IP 地址连接至 IIS 的步骤

  1. 在 Visual Studio 中,在 Windows Phone 项目中,右击“服务引用”文件夹内的服务引用,然后选择“删除”。该步骤移除现有的服务引用。

  2. “添加服务引用”对话框中,单击“发现”,然后单击“解决方案中的服务”。WCF 项目中的服务被发现并显示出来。请注意,该 URL 包括开发计算机的 IP 地址。

    Discovering the service when hosted by IIS
  3. “添加服务引用”对话框中,单击“确定”。使用开发计算机 IP 地址的新服务引用被添加至 Windows Phone 项目

配置解决方案后,重新测试您的应用。现在,应用将顺利地找到并连接至在开发计算机上本地运行的 WCF Web 服务。

在配置解决方案之后,测试从在模拟器上运行的应用连接至本地 Web 服务的步骤

  1. 按 F5 运行模拟器中的项目。模拟器将启动,随后应用将运行。几秒钟后,显示来自 Web 服务的结果。

    App running successfully in the emulator
  2. 按 Shift-F5 停止调试。

在 Windows Phone 8 上运行的 Internet Explorer 无法显示接收自 Web 服务的 SOAP 或 XML 格式的响应。如果您在手机上使用该浏览器浏览的 Web 服务用 SOAP 或 XML 格式发送响应,那么浏览器将显示空白屏幕。

若要在您使用 Windows Phone SDK 8.0 中的工具时查找答案并解决问题,请访问 Windows Phone 开发工具论坛。若要查看有关 Windows Phone 开发的所有论坛,请访问 Windows Phone 开发论坛。若要查看其他支持选项,请访问 MSDN 疑难解答和支持

显示:
© 2014 Microsoft