Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF服务-将对象发送回调用应用程序_Wcf - Fatal编程技术网

WCF服务-将对象发送回调用应用程序

WCF服务-将对象发送回调用应用程序,wcf,Wcf,我的WCF服务(托管为Windows服务)有一些“SendEmail”方法,在进行一些处理后发送电子邮件 现在,我有另一个要求,客户希望在发送电子邮件之前预览电子邮件,所以我的WCF服务需要将整个电子邮件对象返回到调用web应用程序。 如果客户对电子邮件对象感到满意,他们只需单击“发送”,然后再次调用WCF服务发送电子邮件 因为有时电子邮件对象处理可能需要更长的时间,所以我不希望调用应用程序等待电子邮件对象准备就绪 有谁能告诉我,我需要对我的WCF服务(目前都是单向操作)进行哪些更改 另外,请指

我的WCF服务(托管为Windows服务)有一些“SendEmail”方法,在进行一些处理后发送电子邮件

现在,我有另一个要求,客户希望在发送电子邮件之前预览电子邮件,所以我的WCF服务需要将整个电子邮件对象返回到调用web应用程序。 如果客户对电子邮件对象感到满意,他们只需单击“发送”,然后再次调用WCF服务发送电子邮件

因为有时电子邮件对象处理可能需要更长的时间,所以我不希望调用应用程序等待电子邮件对象准备就绪

有谁能告诉我,我需要对我的WCF服务(目前都是单向操作)进行哪些更改

另外,请指导我是否需要进行异步操作或消息队列,或者可能是双工合同


谢谢大家!

根据您的描述,我认为您必须:

  • 将当前操作从发送电子邮件更改为存储电子邮件(可能在数据库中)
  • 添加用于检索当前用户准备好的电子邮件的附加操作
  • 添加其他方法以确认发送一封或多封电子邮件并将其从存储中删除
这一进程将是:

  • 用户将触发一些http请求,这将导致调用WCF服务进行处理(第一个操作)
  • WCF服务将启动一些处理(异步或firt操作将是单向的,以便客户端不必等待)
  • 处理将以某种方式保存电子邮件
  • 根据处理的持续时间,您可以使用AJAX轮询WebApp,WebApp将轮询WCF服务以获取准备好的电子邮件,或者您将创建单独的页面,用户必须访问该页面才能查看准备好的电子邮件。两种方法都使用第二种操作
  • 用户将检查准备好的电子邮件并触发http请求,这将导致调用第三个操作来发送这些电子邮件
    您有多种选择:

    • 使用拉迪斯拉夫的方法。仅添加该服务返回一个令牌,然后客户端使用该令牌进行轮询,直到超时或成功响应。服务器还将这些临时电子邮件保留一段时间,并在超时后清除它们
    • 使用双工通信,这样服务器也可以回调客户机,并在客户机完成处理后回调但不要这样做——以下是为什么不这样做
    • 使用异步方法。你可以找到很好的信息

    不要使用ASP.NET应用程序中的双工,它不会工作:谢谢Ladislav,是的,这就是它应该工作的方式。一个查询,如果我去排队/将请求保存到数据库部分,我如何启动一个异步方法,以便reporting service从队列接收第一个请求进行处理,我是否应该为此启动一个新线程?这是否意味着您希望在任何给定时间只处理单个请求?是的,我这样认为。因为一旦请求保存到数据库或排队,客户机就可以愉快地继续处理其他内容。。。所以服务应该从队列中获取第一个未处理的作业,并开始处理该作业。我应该怎么做才能让我的服务从队列中选择作业并开始处理它?另外,顺便问一下,是否可以从队列中提取多个作业进行处理?这取决于您。您的windows服务可以有后台线程,该线程将定期检查队列并接收任意数量的处理请求。嗯,您能否指导我如何将后台线程添加到当前wcf服务,以从db队列接收一个或多个请求。或者,您如何看待添加另一个wcf服务来执行中提到的后台任务