如何自动/安排在IIS中托管的WCF服务调用?

时间:2011-08-01 13:26:16

标签: wcf iis iis-7 powershell

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

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 个答案:

答案 0 :(得分:4)

假设您运行的是至少7.5版的IIS,则可以使用IIS auto-start的IIS托管应用程序。自动启动不会在计时器上运行,但有助于确保您的应用程序始终在运行。 IIS启动应用程序后,您的代码可以启动timer每天调用WCF服务。

当然,计时器可以用代码实现。简单计时器实现的示例包括thisthisthis

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

答案 1 :(得分: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时,您可以同时将服务公开为SOAP服务和RESTful Web服务,方法是在应用程序的web.config中添加一些配置:webHttpBinding,服务端点和endpointBehavior,根据:http://weblogs.asp.net/kiyoshi/archive/2008/10/08/wcf-using-webhttpbinding-for-rest-services.aspx

答案 2 :(得分:3)

检查ou New-WebServiceProxy。它非常有用,你将它指向网址并加载网络服务。您可以将它传递给Get-Member以查看可用的内容。

马特

编辑:示例现在我不在手机上: - )

# 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