C# WCF服务,已执行属性?

C# WCF服务,已执行属性?,c#,wcf,C#,Wcf,我有一个WCF服务,标有OperationContract属性。 在执行此操作时,我有一个可能要执行的长时间运行任务,但我不希望调用方(在本例中为Silverlight)必须等待该任务完成 我的最佳选择是什么 我也在想 类似于System.Web.Mvc中的actionfilteratibute的OnActionExecuted方法,但看不到等效的 听某个事件的东西。(我想调用的过程是静态的,所以我对这种方法不太确定) 还有一件事: 在我正在使用的场景中,我会锁定应用程序,以便用户在保存过程

我有一个WCF服务,标有
OperationContract
属性。 在执行此操作时,我有一个可能要执行的长时间运行任务,但我不希望调用方(在本例中为Silverlight)必须等待该任务完成

我的最佳选择是什么

我也在想

  • 类似于
    System.Web.Mvc
    中的
    actionfilteratibute
    的OnActionExecuted方法,但看不到等效的
  • 听某个事件的东西。(我想调用的过程是静态的,所以我对这种方法不太确定)
  • 还有一件事:

在我正在使用的场景中,我会锁定应用程序,以便用户在保存过程中无法进行任何更改,直到我返回响应(状态代码)。

请记住,Silverlight实际上不必“等待”呼叫完成。在Silverlight中创建服务引用时,将自动获得异步调用

假设您确实不需要等待调用完成(即:您的服务方法使用“void”返回类型),您可以通过以下方式将服务方法标记为单向:

[OperationContract(IsOneWay = true)]
void MyServiceMethod(some args);

请记住,Silverlight实际上不必“等待”通话结束。在Silverlight中创建服务引用时,将自动获得异步调用

假设您确实不需要等待调用完成(即:您的服务方法使用“void”返回类型),您可以通过以下方式将服务方法标记为单向:

[OperationContract(IsOneWay = true)]
void MyServiceMethod(some args);

通常,我建议让另一个流程服务处理长时间运行的操作。创建一个简单的Windows服务,并让它通过WCF从MSMQ队列中提取请求。让主服务将请求发送到后台服务,然后返回其调用者。如果有人关心结果,那么结果可能会被放在输出队列中,Silverlight应用程序可以通过查询输出队列来获取结果


您也可以查看Windows工作流基金会,它与WCF非常适合。事实上,您可以使用这种服务,其中服务的所有逻辑都在工作流中。如果工作流花费的时间太长,则可以将其持久化到磁盘,直到它准备好再次运行。

一般来说,我建议让另一个流程服务处理长时间运行的操作。创建一个简单的Windows服务,并让它通过WCF从MSMQ队列中提取请求。让主服务将请求发送到后台服务,然后返回其调用者。如果有人关心结果,那么结果可能会被放在输出队列中,Silverlight应用程序可以通过查询输出队列来获取结果


您也可以查看Windows工作流基金会,它与WCF非常适合。事实上,您可以使用这种服务,其中服务的所有逻辑都在工作流中。如果工作流花费的时间太长,可以将其保存到磁盘,直到它准备好再次运行。

我的建议是为您的分布式计算使用nettcp绑定 试试看,你就会找到解决问题的办法

有关NetCpBinding的用法,请点击以下链接


我的建议是为您的分布式计算使用nettcp绑定 试试看,你就会找到解决问题的办法

有关NetCpBinding的用法,请点击以下链接


那么您的意思是,我希望第一个操作作为单独的单向服务触发第二个操作?是的,根据您对“长时间运行”的定义,您可能希望使用一种服务方法启动进程,然后定期ping以查看它是否使用另一种服务方法完成。因此,您本质上说的是,是否有第二个操作,我希望第一个操作作为单独的单向服务触发?是的,根据您对“长时间运行”的定义,您可能希望使用一种服务方法启动进程,然后定期ping以查看它是否使用另一种服务方法完成。