私はWCFコールバックをwpdualhttpbindingを使用してasp.net Webアプリケーションに実装しました。私のページのgridviewの行を更新するために使いたいと思います。私は更新パネルにgridviewを配置し、コールバックはクライアント上で発生しますが、グリッド内のデータは決して更新されません。私は無駄にdatabindを呼び出した後、更新パネルのUpdate()メソッドを呼び出すことを試みました。私が行方不明になっていることや、これを働かせるために何か必要なことがありますか?ここでWCFコールバックを使用してasp.net gridviewデータを更新する
は、私が使用していたコードの一部です:
ページロードでは、私は、WCFコールバックに添付し、私は、コールバック用のインターフェイスを継承し、インターフェイスの実装に私がグリッドにバインドコールバックから受信されたデータで:
[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
}
コールバックは、次のように定義されますあなたは番目から戻ってきた前
[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
}
コードを表示する必要があります。特に、サービスの呼び出し方法を示し、コールバックを表示します。 –
元の投稿にコードを追加しました –