没有Begin Async方法

时间:2012-07-20 01:16:28

标签: c# wcf svcutil.exe service-reference

我是WCF和Async的新手。我有一个长期运行方法的开始和结束服务。

[ServiceContract]
public interface IDocImagingStatusService
{
    [OperationContract(AsyncPattern = true)]
    IAsyncResult BeginGetDirectoryCount(AsyncCallback callback, object state);
    IList<DirectoryCounts> EndGetDirectoryCount(IAsyncResult result);
}

我的客户端需要调用BeginGetDirectoryCount,但我看到的只是一个GetDirectoryCount()方法。他们去哪儿了?

var docImgSvc = new DocImagingService.DocImagingStatusServiceClient( "WSHttpBinding_IDocImagingStatusService");
docImgSvc.GetDirectoryCount();

2 个答案:

答案 0 :(得分:2)

您可能希望确保使用异步操作生成代理。如果您直接使用svcutil,请参阅http://msdn.microsoft.com/en-us/library/aa347733.aspx。如果您使用的是Visual Studio的“添加服务引用”菜单,则需要在“高级”设置中查找生成异步代理方法的选项。

答案 1 :(得分:2)

默认情况下Visual Studiosvcutil.exe工具中的“添加服务参考”对话框不会为您的服务合同生成异步操作。如果要生成它们,则需要在两个选项中明确指定:

  • 在Visual Studio 2010中,您可以在“添加”中选择Advanced按钮 “服务参考”对话框,然后选中“高级”对话框中的Generate Asynchronous Operations复选框,如下所示:

enter image description here

  • 在svcutil.exe工具中,您需要使用/ async开关,如下所示 MSDN中的摘录说:

/async:生成同步和异步方法签名。              默认值:仅生成同步方法签名。              简表:/ a