我有一个简单的服务,它有一个名为 Sum 的操作合同方法
[OperationContact]
int sum(int i, int q);
当我将 Web 服务集成到 Silverlight 应用程序中时,将此代码添加到主页中:
ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
它不调用 sum 方法。此外,它显示:
obj.sumAsync(int i, int q)
我有一个简单的服务,它有一个名为 Sum 的操作合同方法
[OperationContact]
int sum(int i, int q);
当我将 Web 服务集成到 Silverlight 应用程序中时,将此代码添加到主页中:
ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
它不调用 sum 方法。此外,它显示:
obj.sumAsync(int i, int q)
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());
}
};
}
您是否已将方法标记为[OperationContact]. “操作联系”毫无意义。
Silverlight 使用异步编程模型。因此,服务调用也是异步的。您必须在调用异步 wcf 方法之前注册服务操作的回调:
obj.SumAsyncCompleted += SumAsyncCompleted;
obj.sumAsync(1, 2);
void SumAsyncCompleted(object sender, SumAsyncCompletedEventArgs e)
{
//do something with e.Result
}