【发布时间】:2014-06-22 10:21:09
【问题描述】:
我在使用 wcf 和 wp8.1 silverlight 时遇到问题。我很遗憾地收到错误合同“IPhoneService”包含同步操作,Silverlight 不支持这些操作。将操作拆分为“开始”和“结束”部分,并将 OperationContractAttribute 上的 AsyncPattern 属性设置为“true”。请注意,您不必在服务器上进行相同的更改。将同步方法更改为异步后,我仍然遇到相同的错误(我更新了服务参考。)。出于好奇,我尝试在控制台应用程序上使用它,并且效果很好。 以前我确实遇到了另一个可能与它有关的错误。添加服务引用会生成一个 app.config 文件,但该应用需要一个 ServiceReferences.ClientConfig,所以我只是将其重命名。
现在我将 WCF 方法改回同步:
public int GetData()
{
return 12;
}
在我的 MainViewModel 上(我正在使用 MVVMLight 工具包):
public void Load()
{
var client = new ServiceReference1.PhoneServiceClient();
client.GetDataCompleted += client_GetDataCompleted;
client.GetDataAsync();
}
void client_GetDataCompleted(object sender, ServiceReference1.GetDataCompletedEventArgs e)
{
Title = e.Result.ToString();
}
我在这样的异步方法之前实现了,还是得到了同样的错误:
public IAsyncResult BeginGetData(AsyncCallback callback, object asyncState)
{
var msg = 12;
return new CompletedAsyncResult<int>(msg);
}
public int EndGetData(IAsyncResult r)
{
CompletedAsyncResult<int> result = r as CompletedAsyncResult<int>;
return result.Data;
}
class CompletedAsyncResult<T> : IAsyncResult
{
T data;
public CompletedAsyncResult(T data)
{ this.data = data; }
public T Data
{ get { return data; } }
#region IAsyncResult Members
public object AsyncState
{ get { return (object)data; } }
public WaitHandle AsyncWaitHandle
{ get { throw new Exception("The method or operation is not implemented."); } }
public bool CompletedSynchronously
{ get { return true; } }
public bool IsCompleted
{ get { return true; } }
#endregion
}
【问题讨论】:
标签: c# wcf silverlight windows-phone-8.1