0

我是 WCF 和异步的新手。我在长时间运行的方法上有一个带有 Begin 和 End 的服务。

[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();
4

2 回答 2

2

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

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

在此处输入图像描述

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

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

于 2012-07-20T12:47:40.840 回答
2

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

于 2012-07-20T02:53:11.477 回答