从Silverlight调用WCF服务

时间:2012-05-17 07:44:01

标签: c# wcf silverlight web-services .net-4.0

我有一个简单的服务,只有一个名为Sum

的操作合同方法
[OperationContact]
int sum(int i, int q);

当我将Web服务集成到Silverlight应用程序中时,将此代码添加到主页面中:

ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();

它不会调用sum方法。此外,它显示:

obj.sumAsync(int i, int q)

3 个答案:

答案 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
}