我正在尝试使用 ChannelFactory 调用异步服务。
我不确定的一点是如何最好地保持对通道的引用 - 在调用 BeginSave 和 EndSave 之间(在回调方法中)。
我目前正在通过将其分配给实例变量来执行此操作,但这似乎并不理想。我只希望频道在通话期间存在(我认为这是最佳做法,即打开、使用、关闭)。我还想确保我关闭了正确的频道,在某些情况下可能存在多个频道。
任何关于如何最好地做到这一点的例子都会很棒。
这是我的代码:
public partial class MyForm : Form
{
ICompanyService m_Channel;
public MyForm()
{
InitializeComponent();
// ChannelProvider is a class I've created which returns a channel created by the ChannelFactory
ChannelProvider<ICompanyService> channelProvider = new ChannelProvider<ICompanyService>();
m_Channel = channelProvider.GetChannel();
}
private void OnSaveButtonClickAsync(object sender, EventArgs e)
{
Company company = new Company();
company.BranchId = "A1";
company.CompanyName = "A1 LTD";
m_Channel.BeginSave(
company,
new AsyncCallback(OnSaveCallback),
null);
StatusLabel.Text = "Saving...";
}
private void OnSaveCallback(IAsyncResult ar)
{
int result = m_Channel.EndSave(ar);
Invoke(
new MethodInvoker(delegate()
{
StatusLabel.Text = result.ToString();
}));
}
}
非常感谢。