3

我有一个简单的服务,它有一个名为 Sum 的操作合同方法

[OperationContact]
int sum(int i, int q);

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

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

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

obj.sumAsync(int i, int q)
4

3 回答 3

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());
            }
        };
}
于 2012-05-17T08:01:48.297 回答
1

您是否已将方法标记为[OperationContact]. “操作联系”毫无意义。

于 2012-05-17T08:01:51.720 回答
1

Silverlight 使用异步编程模型。因此,服务调用也是异步的。您必须在调用异步 wcf 方法之前注册服务操作的回调:

obj.SumAsyncCompleted += SumAsyncCompleted;
obj.sumAsync(1, 2);

void SumAsyncCompleted(object sender, SumAsyncCompletedEventArgs e)
{
    //do something with e.Result
}
于 2012-05-17T08:10:43.950 回答