我正在嘗試使用ChannelFactory來調用異步服務。WCF - 如何保持開始和結束通話之間的通道/代理
我不確定的一點是如何最好地保持對通道的引用 - 在調用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();
}));
}
}
非常感謝。
只是出於好奇,爲什麼你要守住通道?你想用它來打另一個電話嗎?我不明白你在做什麼。 – stephenl 2011-03-31 05:57:31
這樣我可以調用服務的EndSave方法,然後關閉OnSaveCallback方法中的通道。例如,如果我正在同步調用,則可以在同一個方法中完成所有這些操作,而無需實例/成員變量。 – P2l 2011-03-31 12:37:28