如何自动化/计划托管在IIS中的WCF服务调用?

3

我有一个非常简单的服务合同,用于管理自己的数据导入,类似于这样:

using System.ServiceModel;

namespace Company.Services.Domain.Contract
{
    [ServiceContract(Name = "ImportService", Namespace = "http://services.company.org/")]
    public interface IImportService
    {
        [OperationContract]
        ImportResponse ImportData();
    }
}

我希望设置一个定时任务或类似的东西来每天执行此调用。我知道可以编写控制台应用程序并通过svcutil创建代理。但是否有一种在IIS中本地配置(也许是IIS扩展名)的方法?或者我可以用PowerShell实现简单而优雅的解决方案吗?只是想知道我的选择是什么。
3个回答

4
您可以拥有一个使用IIS自动启动的IIS托管应用程序,假设您正在运行至少7.5版本的IIS。自动启动不会在定时器上运行,但将有助于保证您的应用程序始终运行。在IIS启动应用程序后,您的代码可以启动计时器每天调用WCF服务。

计时器当然是在代码中实现的。简单计时器实现的示例包括this, this, 和 this

如果您正在使用ASP.NET,则将计时器启动代码放入自动启动应用程序的global.asax文件中的Application_Start方法中。


自动启动是保持服务高度可用的一个不错的功能……不确定它如何在特定时间调用特定的服务方法。只有应用程序启动时才会触发一次,对吧? - Brandon Linton
您的代码中会有一个由应用程序启动开始的定期计时器,而IIS的自动启动将确保它始终运行。我编辑了我的答案,包括一些几行代码实现示例的链接。 - schellack

3
你可以使用cURL(Windows和'nix版本都可用):http://curl.haxx.se/ 将你的定时任务设置为调用curl.exe,并使用适当的参数向你的Web服务的URL发出请求:
curl -o importResponse.txt http://services.company.org/ImportService.svc/ImportData

-o 参数可以将响应保存到指定名称的文本文件中。其他配置选项可以在手册中找到:http://curl.haxx.se/docs/manual.html 编辑:这假设您正在公开一个 Web 服务并使用 GET(而不是 POST 或 SOAP)。如果您正在公开 SOAP 服务,它仍然应该相当简单,因为您没有传递任何参数。
curl --request POST --header 'Content-type: text/xml' --output importResponse.txt --data <SOAP/> http://services.company.org/ImportService.svc/ImportData

另外,由于您正在使用WCF,您可以通过向应用程序的web.config添加一些配置来同时将您的服务公开为SOAP服务和RESTful Web服务:a webHttpBinding,一个服务端点和一个endpointBehavior,如下所示:http://weblogs.asp.net/kiyoshi/archive/2008/10/08/wcf-using-webhttpbinding-for-rest-services.aspx


很酷的工具!但我不需要抓取SOAP正文并将其作为参数发布吗? - Brandon Linton
啊,如果你正在使用SOAP,那就有点复杂了。我已经相应地更新了答案。 - Ash Eldritch
我尝试了更新的curl命令,但似乎没起作用...我确信可以在普通调用中找到生成的SOAP,并将其插入,但我需要再多尝试一下。接下来要看看那种RESTful方式是否也可行。 - Brandon Linton
将该方法通过GET调用将使自动化变得非常简单。感谢那篇博客文章,我刚刚验证了它的工作。 - Brandon Linton

3

请查看New-WebServiceProxy。它非常有用,您只需将其指向URL即可加载Web服务。您还可以将其管道传输到Get-Member以查看可用内容。

Matt

编辑:现在举个例子,我不在手机上了 :-)

# url for the service
$url = "http://services.company.org/ImportService"             

# Create the service - using default credentials         
$service = New-WebServiceProxy $Url -UseDefaultCredentials

# explore the service
$service | gm

如需更多信息,请查看PowerShell帮助文档。

help New-WebServiceProxy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接