【问题标题】:Web Service missing methods when called from Silverlight从 Silverlight 调用时,Web 服务缺少方法
【发布时间】:2010-02-08 01:32:43
【问题描述】:

我创建了 WCF Web 服务,对其进行了部署和调试。我编写了一个控制台应用程序,引用了 Web 服务,一切正常。

现在,我正在尝试在 silverlight 3 应用程序中使用 Web 服务。我将以下代码添加到点击事件中。

TagServiceClient client = new TagServiceClient();
Tag[] tags = client.GetTags();
client.Close();

VS 告诉我它找不到 GetTags() 和 Close() 方法。但是VS在console app中这些方法都没有问题。

我在文件顶部添加了一条用于服务引用的 using 语句。

我在根域和包含 Web 服务的文件夹中放置了一个 clientaccesspolicy.xml 文件。无论它在哪里,似乎都不会改变任何东西。

发生了什么事?有什么建议么?这是我第一次在 Silverlight 中使用 Web 服务,所以我可能会遗漏一些东西。

【问题讨论】:

    标签: wcf silverlight silverlight-3.0


    【解决方案1】:

    您将需要生成一个新的客户端代理以在 Silverlight 应用程序中使用 - IOW,从 Silverlight 应用程序添加一个新的服务引用,并将其指向该服务。

    然后您会发现情况有些不同 - 您会发现代理中有异步方法,而不是您在为控制台应用程序生成的代理中看到的同步方法。因此,在 silverlight 应用程序中,您的代码最终将如下所示:

    client.GetTagsCompleted += [my event handler];
    client.GetTagsAsync();
    

    在您的事件处理程序中:

    if (e.Error == null)
        if (!e.Cancelled)
            List<Tag> tags = new List<Tag>(e.result);
    

    当您向 silverlight 应用程序添加服务引用时,请确保您对高级设置有所了解,因为您可以更改项目返回的集合类型等(默认返回集合是 @987654323 @)。

    如果你想避免这种事情(不同的应用程序或模块的不同代理),那么考虑使用 svcutil 来生成你的代理,而不是让 VS 来做(VS 不使用 svcutil)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      相关资源
      最近更新 更多