我有一个简单的服务,只有一个名为Sum
的操作合同方法[OperationContact]
int sum(int i, int q);
当我将Web服务集成到Silverlight应用程序中时,将此代码添加到主页面中:
ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
它不会调用sum方法。此外,它显示:
obj.sumAsync(int i, int q)
答案 0 :(得分:4)
Silverlight不允许创建Web服务的同步代理。它使用异步服务代理模型。 Silverlight中的每个OperationContract都有两个属性:
obj.sumAsync(int i, int q, object state)
obj.sumAsyncCompleted; // Event
你应该试试这个:
private void CallMethod()
{
obj.sumAsync(2,2);
obj.sumAsyncCompleted += (s,e) =>
{
if (e.Error == null)
{
MessageBox.Show(e.Result.ToString());
}
};
}
答案 1 :(得分:1)
您是否使用[OperationContact]
标记了该方法。 "业务联系"毫无意义。
答案 2 :(得分:1)
Silverlight适用于异步编程模型。因此,服务调用也是异步的。 在调用异步wcf方法之前,您必须注册服务操作的回调:
obj.SumAsyncCompleted += SumAsyncCompleted;
obj.sumAsync(1, 2);
void SumAsyncCompleted(object sender, SumAsyncCompletedEventArgs e)
{
//do something with e.Result
}