我想在Silverlight中创建和使用WCF服务。我创建了一个从数据库中返回此模型的服务:
self.click = function()
{
$scope.Message = "2";
}
服务如下:
namespace SilverlightWithWCFService.Web
{
[DataContract]
public class Customer
{
[DataMember]
public string CustomerName { get; set; }
[DataMember]
public string CompanyName { get; set; }
[DataMember]
public string ContactName { get; set; }
}
}
在我的Silverlight应用程序中,我添加了一个服务引用。此方法调用服务操作:
namespace SilverlightWithWCFService.Web
{
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SampleService
{
[OperationContract]
public List<Customer> CustomerList()
{
var custList = new List<Customer>();
// populate custList
return custList;
}
}
}
}
所以我的问题是:我不知道Silverlight如何与WCF一起工作。我是否必须在WCF端序列化某些内容并在客户端反序列化返回值?如果是这样,缺少什么代码? (在哪儿?)
更新
我认为基于一些在线questions。我应该在已完成的事件代码中反序列化返回的 public Page()
{
InitializeComponent();
SampleServiceClient client = new SampleServiceClient();
client.CustomerListCompleted += new EventHandler<CustomerListCompletedEventArgs>(client_CustomerListCompleted);
client.CustomerListAsync();
}
void client_CustomerListCompleted(object sender, CustomerListCompletedEventArgs e)
{
CustomerGrid.ItemsSource = e.Result;
}
吗?
答案 0 :(得分:1)
我是否必须在WCF端序列化某些内容并在客户端反序列化返回值?
不,当您使用Web服务时,底层代码将为您完成所有这些操作。
不要挂断它是Silverlight。只需将Silverlight视为控制台应用程序即可。无论在控制台应用程序中需要做什么来使用Web服务,都必须在Silverlight中进行。唯一的区别是您需要以异步方式处理调用,但这与您的问题所涉及的Web服务的使用是分开的。
请注意,在编译期间,有一个竞争技术可以完成Web服务的所有更新。这被称为RIA服务,这是一个不同的动物。
我建议您使用WCF Web服务,但更新发送/接收缓冲区的大小,以便在任何真正的数据传输上轻松完成。