从Silverlight调用时,Web Service缺少方法

时间:2010-02-08 01:32:44

标签: wcf silverlight silverlight-3.0

我创建了WCF Web服务,部署并调试它。我写了一个控制台应用程序,引用了Web服务,一切正常。

现在,我正在尝试在Silverlight 3应用程序中使用Web服务。我在click事件中添加了以下代码。

TagServiceClient client = new TagServiceClient();
Tag[] tags = client.GetTags();
client.Close();
VS告诉我它无法找到GetTags()和Close()方法。但VS在控制台应用程序中对这些方法没有任何问题。

我在服务引用的前面添加了一个using语句。

我在根域和包含Web服务的文件夹中放置了clientaccesspolicy.xml文件。似乎没有任何改变,无论它在哪里。

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

1 个答案:

答案 0 :(得分:2)

您需要生成一个新的客户端代理以在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应用程序时,请确保您在高级设置周围进行了操作,因为您可以更改返回项目的集合类型等(默认返回集合为{{ 1}})。

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