J'ai un callback WCF implémenté dans une application web asp.net en utilisant un wsdualhttpbinding que je voudrais utiliser pour mettre à jour les lignes dans un gridview sur ma page. Je mets le gridview dans un panneau de mise à jour, et le rappel est en train d'exploser sur le client, mais les données dans la grille ne sont jamais mises à jour. J'ai essayé d'appeler la méthode Update() du panneau de mise à jour après avoir appelé le databind en vain. Y at-il quelque chose qui me manque ou quelque chose d'autre que je dois faire pour que cela fonctionne?Utilisation du rappel WCF pour mettre à jour les données gridview d'asp.net
Voici une partie du code J'utilise:
la charge de la page, je joins le rappel WCF, je possèdes l'interface pour le rappel et la mise en œuvre de l'interface I se lient au réseau avec les données reçues du callback:
[CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
public partial class activeJobs : System.Web.UI.UserControl, IAgentMessagingCallback
{
AgentMessagingClient _messagingClient;
protected void Page_Load(object sender, EventArgs e)
{
InstanceContext context = new InstanceContext(this);
_messagingClient = new AgentMessagingClient(context, "AgentMessaging_IAgentMessaging");
if (_messagingClient.Subscribe())
{
Page.Title = string.Format("Timeout will occur at {0}", DateTime.Now.AddMinutes(10));
}
}
#region IAgentMessagingCallback Members
public void ActiveJobs(SubmittedJob[] activeJobs1)
{
activeJobsGrid.DataSource = activeJobs1.ToList();
//checked in the debugger, the data is actually recieved...
activeJobsGrid.DataBind();
//the update method for the updatepanel...tried this both ways, no go
//activeJobsGridUP.Update();
}
#endregion
}
le rappel est défini comme tel:
[ServiceContract(CallbackContract = typeof(IAgentMessagingCallback))]
public interface IAgentMessaging
{
[OperationContract(IsOneWay = true)]
void SendActiveJobs(List<SubmittedJob> activeJobs);
[OperationContract(IsOneWay = false)]
bool Subscribe();
[OperationContract(IsOneWay = false)]
bool Unsubscribe();
}
public interface IAgentMessagingCallback
{
[OperationContract(IsOneWay = true)]
void ActiveJobs(List<SubmittedJob> activeJobs);
}
public class AgentMessaging : IAgentMessaging
{
private static readonly List<IAgentMessagingCallback> _subscribers = new List<IAgentMessagingCallback>();
#region IAgentMessaging Members
public void SendActiveJobs(List<SubmittedJob> activeJobs)
{
_subscribers.ForEach(delegate(IAgentMessagingCallback callback)
{
if (((ICommunicationObject)callback).State == CommunicationState.Opened)
{
try
{
callback.ActiveJobs(activeJobs);
}
catch (Exception ex)
{
Messaging.ErrorMessage(ex, this.ToString());
}
}
else
{
_subscribers.Remove(callback);
}
});
}
public bool Subscribe()
{
try
{
IAgentMessagingCallback callback = OperationContext.Current.GetCallbackChannel<IAgentMessagingCallback>();
if (!_subscribers.Contains(callback))
{
_subscribers.Add(callback);
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
Messaging.ErrorMessage(ex, this.ToString());
return false;
}
}
public bool Unsubscribe()
{
try
{
IAgentMessagingCallback callback = OperationContext.Current.GetCallbackChannel<IAgentMessagingCallback>();
if (_subscribers.Contains(callback))
{
_subscribers.Remove(callback);
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
Messaging.ErrorMessage(ex, this.ToString());
return false;
}
}
#endregion
}
Vous allez devoir montrer du code. En particulier, montrez comment vous appelez le service et affichez le rappel. –
Code ajouté au message d'origine –