2010-02-08 63 views
1

我創建了WCF Web服務,部署它並對其進行調試。我編寫了一個控制檯應用程序,引用了Web服務,並且一切正常。從Silverlight調用時Web服務缺少方法

現在,我試圖在Silverlight 3應用程序中使用Web服務。我將下面的代碼添加到了單擊事件中。

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

VS告訴我它找不到GetTags()和Close()方法。但VS在控制檯應用程序中的這些方法沒有問題。

我將服務引用的using語句添加到我的文件頂部。

我在根域和包含Web服務的文件夾中放置了一個clientaccesspolicy.xml文件。不管它在哪裏,似乎都沒有改變。

發生了什麼事?有什麼建議麼?這是我第一次在Silverlight中使用Web服務,所以我可能會錯過一些東西。

回答

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應用程序,確保你可以在高級設置周圍捅一捅,因爲你可以改變返回什麼樣的收集物品等等(默認返回集合是ObservableCollection<T>)。

如果你想避免這樣的事情(不同的應用程序或模塊不同的代理),那麼考慮使用svcutil來生成你的代理,而不是讓VS來做(VS不使用svcutil)。