【问题标题】:Consuming web service in Silverlight在 Silverlight 中使用 Web 服务
【发布时间】:2010-09-01 16:45:45
【问题描述】:

我有一个正常的 .asmx Web 服务,可以在浏览器中正常加载。当我加载包含 Silverlight 应用程序的网页时,数据不会加载,并且我收到一个 javascript 错误,其中指出;

网页错误详情

用户代理:Mozilla/4.0(兼容; MSIE 8.0;视窗 NT 6.1;三叉戟/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729;媒体中心PC 6.0; .NET4.0C; .NET4.0E) 时间戳:2010 年 9 月 1 日,星期三 16:43:32 世界标准时间

消息:未处理的错误 Silverlight 应用程序异常 操作过程中发生,使得 结果无效。查看 异常详细信息的 InnerException。 在 System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() 在 Operations.Dashboard.DashboardMetrics.GetP200MA_CountCompletedEventArgs.get_Result() 在 Operations.Dashboard.MainPage.client_GetP200MA_CountCompleted(对象 发件人, GetP200MA_CountCompletedEventArgs e)
在 .Operations.Dashboard.DashboardMetrics.MetricsSoapClient.OnGetP200MA_CountCompleted(对象 状态)行:1 字符:1 代码:0 URI: http://ukhqdevmp-3790:8080/ChartTestPage.aspx

消息:未处理的错误 Silverlight 应用程序异常 操作过程中发生,使得 结果无效。查看 异常详细信息的 InnerException。 在 System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() 在 Operations.Dashboard.DashboardMetrics.GetP200C_CountCompletedEventArgs.get_Result() 在 Operations.Dashboard.MainPage.client_GetP200C_CountCompleted(对象 发件人, GetP200C_CountCompletedEventArgs e)
在 Operations.Dashboard.DashboardMetrics.MetricsSoapClient.OnGetP200C_CountCompleted(对象 状态)行:1 字符:1 代码:0 URI: http://ukhqdevmp-3790:8080/ChartTestPage.aspx

它在 VS 中运行良好,但是当通过 IIS 从另一台 PC 访问它时,它不起作用。

MetricsSoapClient client = new MetricsSoapClient();
client.GetP200C_CountCompleted += new EventHandler<DashboardMetrics.GetP200C_CountCompletedEventArgs>(client_GetP200C_CountCompleted);
client.GetP200C_CountAsync(yearStart, yearEnd);
client.GetP200MA_CountCompleted += new EventHandler<DashboardMetrics.GetP200MA_CountCompletedEventArgs>(client_GetP200MA_CountCompleted);
client.GetP200MA_CountAsync(yearStart, yearEnd);

public void client_GetP200C_CountCompleted(object sender, DashboardMetrics.GetP200C_CountCompletedEventArgs e)
{ ... 

更新:使用 Fiddler,我可以看出这是一个安全问题,我猜是双跳问题。

用户“DOMAIN\UKHQDEVMP-3790$”登录失败。

【问题讨论】:

  • 你能贴出你用来初始化网络服务调用的代码吗?
  • 如果你想要任何有用的东西,听起来你也需要发布 InnerException 的内容。
  • @Kelsey - 我创建了一个新的 Silverlight 4 项目(以及相关的 Web 应用程序来托管它)。在 Web 应用程序中,我创建了一个 Web 服务来使用 Linq 从数据库中发布数据。然后我使用下面的代码在我的 MainPage.xaml.cs 中使用它。
  • MetricsSoapClient 客户端 = 新 MetricsSoapClient(); client.GetP200C_CountCompleted += new EventHandler(client_GetP200C_CountCompleted); client.GetP200C_CountAsync(yearStart, yearEnd); client.GetP200MA_CountCompleted += new EventHandler(client_GetP200MA_CountCompleted); client.GetP200MA_CountAsync(yearStart, yearEnd); public void client_GetP200C_CountCompleted(object sender, DashboardMetrics.GetP200C_CountCompletedEventArgs e) { ... }
  • 您应该在发布更多信息时编辑您的原始问题。我已将您的代码移至您的问题中。请注意您的代码和我在下面发布的代码的区别。确保你的 Uri 是正确的。尝试像我一样实例化您的 Web 服务并包含所有详细信息。我认为您的网络服务指向本地或相对地址,因此移动它会导致事情中断。

标签: silverlight web-services


【解决方案1】:

首先,您应该验证,当您将其移动到另一台 PC 时,您的 Web 服务地址是正确的,并且您没有尝试连接到 localhost 或与您的 Visual Studio 环境相关的东西。

我记得有这个问题,但很模糊,我不记得我的解决方案是什么,所以我回去查看了以前项目的一些代码以及如何设置 Web 服务。这是一个长镜头,但如果 Web 服务设置不正确,我的代码可能会帮助您指出正确的方向。检查我的以下行,看看它是否有任何帮助(这是使用 Silverlight 3 完成的):

Uri uri = new Uri(Application.Current.Host.Source,
    "../Services/YourWebService.asmx");

// notice this line is commented out and a * is used for biniding instead
//System.ServiceModel.BasicHttpBinding binding = new System.ServiceModel.BasicHttpBinding(); // "*"

YourWebService.YourWebServiceSoapClient = 
    new YourWebService.YourWebServiceSoapClient("*",
            new System.ServiceModel.EndpointAddress(uri));

【讨论】:

  • 当我将服务引用添加到 Silverligfht 项目时,它会按照我上面的代码注释添加所有方法。然后我使用这些来添加我的渲染逻辑。
猜你喜欢
  • 2011-08-27
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
相关资源
最近更新 更多