Как я могу автоматизировать / запланировать вызов службы WCF, размещенный в IIS? - PullRequest
3 голосов
/ 01 августа 2011

У меня необычайно простой контракт на обслуживание для службы, которая управляет собственным импортом данных, например:

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 голосов
/ 01 августа 2011

У вас может быть приложение, размещенное на IIS, которое использует IIS auto-start , при условии, что вы работаете как минимум с версией 7.5 IIS.Автоматический запуск не запускается по таймеру, но поможет гарантировать, что ваше приложение всегда работает.После запуска приложения IIS ваш код может запустить таймер для вызова службы WCF каждый день.

Таймер, разумеется, будет реализован в коде.Примеры простых реализаций таймера включают this , this и this .

Если вы используете ASP.NET, введите код запуска таймерав методе Application_Start в файле global.asax автоматически запускаемого приложения.

3 голосов
/ 02 августа 2011

Проверьте наш New-WebServiceProxy. Это очень полезно, вы указываете его на URL, и он загружает веб-сервис. Вы можете передать его 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
3 голосов
/ 01 августа 2011

Вы можете использовать cURL (доступны версии для Windows и 'nix): http://curl.haxx.se/

Настройте запланированное задание на запуск curl.exe с параметрами, подходящими для отправки запроса на URL-адрес веб-службы:

curl -o importResponse.txt http://services.company.org/ImportService.svc/ImportData

-o поместит ответ в текстовый файл с указанным именем. Другие варианты конфигурации можно найти в руководстве: http://curl.haxx.se/docs/manual.html

РЕДАКТИРОВАТЬ: Это предполагает, что вы выставляете веб-сервис и 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.config вашего приложения: webHttpBinding, конечную точку службы и endpointBehavior, согласно: http://weblogs.asp.net/kiyoshi/archive/2008/10/08/wcf-using-webhttpbinding-for-rest-services.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...