遇到Web服务调用问题

时间:2012-12-20 20:22:01

标签: c# xml web-services http httpwebrequest

我正试图让我的txtResults.Text框中显示影院和电影。

这是我现在的代码......

 MovieInformation MI = new MovieInformation();

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

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

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

4 个答案:

答案 0 :(得分:2)

编译器表示您没有传递服务所需的参数。

我怀疑您的服务会搜索某个邮政编码周围区域(半径)的影院。

你试过吗

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

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

的数组

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

例如:

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是一个多行文本框,其高度足以显示该服务返回的所有影院。

答案 1 :(得分:1)

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

编辑:

根据评论中发布的网络服务网址,您应该按照以下方式调用网络服务:

 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服务返回的每个对象的外观。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

希望这会给你一个想法。