【问题标题】:Having trouble with web service call网络服务调用有问题
【发布时间】:2012-12-20 20:22:00
【问题描述】:

我正在尝试让剧院和电影出现在我的 txtResults.Text 框中。

这是我现在的代码...

 MovieInformation MI = new MovieInformation();

        int rad = int.Parse(txtRadius.Text);

        txtResults.Text = MI.GetTheatersAndMovies(txtZip.Text, rad);

错误是:错误无法将类型'WebShowTimes.movi​​es.Theater[]'隐式转换为'字符串'

【问题讨论】:

  • 错误信息非常简单。查看GetTheatersAndMovies 的定义,看看它需要什么参数。
  • 检查 `GetTheatersAndMovies' 方法,看看它需要多少参数。它要么取零,要么大于一......
  • 好的,现在该方法返回一个 Theatre 对象数组,您正试图将其填充到一个字符串中。

标签: c# xml web-services http httpwebrequest


【解决方案1】:

编译器说您没有传递服务预期的参数。

我怀疑您的服务将搜索特定邮政编码周围区域(半径)内的剧院。

你试过了吗

 txtResults.Text = MI.GetTheatersAndMovies(txtZip.Text,txtRadius.Text);

编辑:看到新的错误消息,现在很明显该方法返回了一个 WebShowTimes.movies.Theater[] 数组

当然这不是字符串,不能用作 TextBox.Text 属性的值,因此您需要一个循环来读取每个返回的 Theatre 并获取您需要在字符串中显示的属性

例如:

WebShowTimes.movies.Theater[] theathers = MI.GetTheatersAndMovies(txtZip.Text, rad);
foreach(WebShowTimes.movies.Theater t in theaters)
{
    txtResults.Text += t.Name + ", " + t.Address + "\r\n";
}

假设 txtResult 是一个多行文本框,其高度足以显示服务返回的所有影院。

【讨论】:

  • 是的,我试过了。检查我编辑的帖子。我修复了半径问题。现在只是拉链有问题。
【解决方案2】:

如果您需要更详细的帮助,请发布 MovieInformation 的代码,但编译器只是告诉您您的 MovieInformation 服务没有一个名为 GetTheatersAndMovies 的方法,该方法采用单个字符串参数。

编辑:

根据您在评论中发布的网络服务 URL,您应该这样调用网络服务:

 MI.GetTheatersAndMovies(txtZip.Text,txtRadius.Text);

您将收到一组Theater 对象,如下所示:

<Theater>
      <Name>string</Name>
      <Address>string</Address>
      <Movies>
        <Movie xsi:nil="true" />
        <Movie xsi:nil="true" />
      </Movies>
</Theater>

更新 2 你应该这样做:

var result = MI.GetTheatersAndMovies(txtZip.Text, rad);
StringBuilder sb  = new StringBuilder();
foreach(var item in result)
{
     sb.Append(string.Format("Theater Name: {0}",item.Name));
     sb.Append(string.Format("Address: {0}",item.Address));
     foreach (var movie in item.Movies)
     {
          sb.Append(string.Format("Movie: {0}",movie.Name));
          sb.Append(string.Format("Rating: {0}",movie.Rating));
     }
}

txtResults.Text = sb.ToString();

您可以查看web service here 的 WSDL,它将准确地告诉您 Web 服务返回的每个对象的外观。

【讨论】:

  • 这就是我正在使用的网络服务。
  • 所以我不确定我做错了什么?我不应该能够将所有返回信息转储到 txtResults.Text 吗?
  • @MattMcCarthy 否,因为 Web 服务返回 Theader[] 类型的强类型对象。您需要遍历数组并获取所需的信息。我将发布另一个更新我的答案。
  • 我已经尝试过您发布的新更新代码。我没有收到任何错误,但是当我点击提交按钮时,结果框中没有弹出任何内容。
【解决方案3】:

显然,您正在调用传递 1 个参数的 Web 方法,并且没有采用 1 个参数的重载。 您可能需要创建一个接受该参数的新方法,然后正确使用它。或者只是删除它正在传递的参数

【讨论】:

    【解决方案4】:

    返回的结果是一个数组,因此以适当的类型获取它,然后循环它以逐一获取电影,例如:

    MI.Theaters  th=MI.GetTheatersAndMovies(txtZip.Text, rad);
     foreach(Mi.movie in th)
       {
         string moviname=mi.movie.name;
       } 
    

    希望这会给你这个想法。

    【讨论】:

      猜你喜欢
      • 2012-12-20
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 2010-11-14
      相关资源
      最近更新 更多