【问题标题】:No Begin Async method没有开始异步方法
【发布时间】:2012-07-19 06:30:15
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 高级设置听起来像是直接的答案。我会在早上检查。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 2023-02-05
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多