【发布时间】:2012-08-04 22:20:49
【问题描述】:
客户
iGame Channel = new ChannelFactory<iGame> ( new BasicHttpBinding ( BasicHttpSecurityMode . None ) , new EndpointAddress ( new Uri ( "http://localhost:58597/Game.svc" ) ) ) . CreateChannel ( );
public Task<SerializableDynamicObject> Client ( SerializableDynamicObject Packet )
{
return Task<SerializableDynamicObject> . Factory . FromAsync ( Channel . BeginConnection , Channel . EndConnection , Packet , null );
}
合同
[OperationContract ( AsyncPattern = true )]
IAsyncResult BeginConnection ( SerializableDynamicObject Message , AsyncCallback Callback , object State );
SerializableDynamicObject EndConnection ( IAsyncResult Result );
服务
public IAsyncResult BeginConnection ( SerializableDynamicObject Message , AsyncCallback Callback , object State )
{
dynamic Request = Message;
dynamic Response = new SerializableDynamicObject ( );
if ( Request . Operation = "test" )
{
Response . Status = true;
}
Response . Status = false;
return new CompletedAsyncResult<SerializableDynamicObject> ( Response );
}
public SerializableDynamicObject EndConnection ( IAsyncResult Result )
{
return ( Result as CompletedAsyncResult<SerializableDynamicObject> ) . Data;
}
从 Silverlight 客户端公开服务
private async void myButton ( object sender , RoutedEventArgs e )
{
dynamic Request = new SerializableDynamicObject ( );
Request . Operation = "test";
var task = Client ( Request );
var result = await task; // <------------------------------ Exception
}
例外
Task<SerializableDynamicObject > does not contain a definition for 'GetAwaiter'
怎么了?
编辑 1:
简单地说,
Visual Studio 2012 RC Silverlight 5 应用程序 使用 游戏 WCF 4 服务 托管在 ASP.net 4 应用程序通过共享 Portable Library .NET4/SL5 使用 ChannelFactory 技术包含带有 Async CTP
的 iGame 接口图表:
ASP.NET 类库(游戏) 可移植库(iGame)=> Silverlight
编辑 2:
- Microsoft.CompilerServices.AsyncTargetingPack.Silverlight5.dll 已添加到我的 SL5 客户端中
- 使用系统。穿线。任务;
【问题讨论】:
-
请说明 C# 版本并包含文件顶部的用法。
-
如果您使用的是 Async CTP,您是否确定要添加对 AsyncCtpLibrary.dll 的引用?
标签: c# wcf silverlight-5.0 async-ctp