我有适用于Silverlight客户端的WCF WebService。
假设客户点击“制作建筑物”。
服务将接收新任务和星号计时,直到它准备好采取行动(即添加到数据库)。
时间 - 完成任务需要多长时间(即建造建筑物)。
关键是如何在一定时间内延迟任务。
此外,有没有办法从服务器流向客户端? 我设置了这个:
[OperationContract]
public void GetTime()
{
foreach (IDuplexClient client in _clientDic.Values)
{
client.ShowStatus(DateTime.Now);
}
}
[OperationContract]
public void Login()
{
string clientID = OperationContext.Current.Channel.SessionId;
IDuplexClient client = OperationContext.Current.GetCallbackChannel<IDuplexClient>();
_clientDic.Add(clientID, client);
}
IDuplexClient:
[OperationContract(IsOneWay = true)]
void ShowStatus(DateTime status);
客户方:
_client.LoginAsync();
_client.GetTimeAsync();
_client.ShowStatusReceived += new EventHandler<ShowStatusReceivedEventArgs>(_client_ShowStatusReceived);
void _client_ShowStatusReceived(object sender, ShowStatusReceivedEventArgs e)
{
label1.Content = e.status.ToString();
}
它正在运作..首次运行。但时间不会得到刷新,这不是我想要的。 同样,在浏览器中几次强制刷新后,时间停止显示。
public partial class MainPage : UserControl
{
Service1Client _client;
int time = 10000;
public MainPage()
{
InitializeComponent();
_client = new Service1Client(new PollingDuplexHttpBinding { DuplexMode = PollingDuplexMode.SingleMessagePerPoll, OpenTimeout = TimeSpan.FromMinutes(10), ReceiveTimeout = TimeSpan.FromMinutes(10) },
new EndpointAddress("http://localhost:44544/Service1.svc"));
_client.LoginAsync();
_client.DoWorkCompleted += new EventHandler<DoWorkCompletedEventArgs>(_client_DoWorkCompleted);
_client.DoWorkAsync();
_client.AddNewTaskAsync("testTaskzor", time);
_client.GetTimeAsync();
//_client.AddNewTaskCompleted += new EventHandler<AddNewTaskCompletedEventArgs>(_client_AddNewTaskCompleted);
_client.ShowStatusReceived += new EventHandler<ShowStatusReceivedEventArgs>(_client_ShowStatusReceived);
}
void _client_ShowStatusReceived(object sender, ShowStatusReceivedEventArgs e)
{
label1.Content = e.status.ToString();
}
void _client_DoWorkCompleted(object sender, DoWorkCompletedEventArgs e)
{
//label1.Content = e.Result;
}
}
那是'整个客户端代码。 虽然我终于修复了,并且时间正确地流向客户端(它非常简单,足以使用while(true)语句来设置foreach,至少现在是这样。)
但另一方面。当我关闭浏览器并再次打开它时,什么都没有显示出来。在我刷新它之后,时间根本不会出现。
答案 0 :(得分:0)
最简单的方法是在客户端实现延迟。在不破坏模型的情况下,您无法真正延迟像WCF这样的RESTful服务。