views:

106

answers:

1

I created WCF web service, deployed it, and debugged it. I wrote a console app, referenced the web service, and everything works.

Now, I'm attempting to consume the web service in a silverlight 3 application. I added the following code to a click event.

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

VS is telling me it can't find the GetTags() and Close() methods. But VS has no problem with these methods in the console app.

I added a using statement for the service reference to the top of my file.

I placed a clientaccesspolicy.xml file in the root domain and in the folder containing the web service. Doesn't seem to change anything regardless where it is.

What's going on? Any suggestions? This is my first time consuming a web service in Silverlight so I may just be missing something.

+2  A: 

You will need to generate a new client proxy to use in the Silverlight app - IOW, from the Silverlight app, add a new service reference, and point it to the service.

You will then see that things are a little different - you will find that there are async methods in the proxy, not the synchronous ones you will have seen in the proxy generated for the console app. So in the silverlight app, your code will end up looking something like this:

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

and in your event handler:

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

When you add a the service reference to the silverlight app, make sure you have a poke around the advanced settings, because you can change what sort of collection the items are returned in, etc (the default return collection is an ObservableCollection<T>).

If you want to avoid this sort of thing (different proxies for different apps or modules), then consider using svcutil to generate your proxy instead of allowing VS to do it (VS doesn't use svcutil).

slugster