Клиент
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 с технологией ChannelFactory через общую Portable Library.NET4/SL5 содержит интерфейс iGame с Асинхронная CTP
График:
ASP.NET <= Библиотека классов (Игра)<= Портативная библиотека (iGame)=> Сильверлайт
Редактировать 2: