繁体   English   中英

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

[英]How can I automate / schedule a WCF service call hosted in IIS?

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

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实现简单而优雅的东西吗?

只是想知道我的选择是什么。

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

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

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

您可以使用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

检查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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM