Вызвать метод в консольном приложении, которое работает в данный момент. - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть консольное приложение, которое я написал на C #, которое опрашивает несколько устройств, собирает некоторые данные и сохраняет информацию в базе данных. Приложение работает на нашем веб-сервере, и мне было интересно, как вызвать вызов метода из командной консоли (чтобы я мог выполнить команду из php, которая будет прочитана консольным приложением, команда shell также подойдет).

У кого-нибудь есть идеи? Я плыл вокруг «Google» и не нашел ничего, что могло бы удовлетворить мои текущие потребности.

Кроме того, я не против внесения изменений в консольное приложение, если там требуется капитальный ремонт. Пожалуйста, если ваш ответ - COM Interop, предоставьте ХОРОШИЙ пример того, как я бы собрал, и вызовите это из PHP / Apache2.

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

Вы можете создать сервис, подобный этому:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(
      Method = "GET",
      UriTemplate = "/magic")]
    void MagicMethod();

}

И реализация сервиса, подобная этой:

public class Service : IService
{
    public void MagicMethod()
    {
        //magic here
    }
}

для запуска службы HTTP она должна выглядеть следующим образом:

WebServiceHost host = new WebServiceHost(typeof(Service), new Uri("http://127.0.0.1:8080"))
ServiceEndpoint ep = host.AddServiceEndpoint(typeof(IService), new WebHttpBinding(), "");
ServiceDebugBehavior stp = host.Description.Behaviors.Find<ServiceDebugBehavior>();

stp.HttpHelpPageEnabled = false;
host.Open();  

Это запустит HTTP-сервер на порту 8080. Затем вы можете сделать HTTP-запрос Get 'http://localhost:8080/magic' для вызова метода.

1 голос
/ 07 сентября 2011

Возможно, ваше консольное приложение может опрашивать каталог для определенного файла и реагировать на это.

Тогда вашему php-приложению нужно будет только создать этот файл, а консольное приложение должно заметить его и делать все, что вы захотите.Я не совсем уверен, что вы хотите сделать.

0 голосов
/ 07 сентября 2011

Я бы посмотрел на использование WCF .Ваше приложение C # будет размещать службу WCF, а затем ваше приложение PHP может вызывать ее, я думаю, PHP5 поставляется с библиотекой SOAP, которая должна сделать это относительно простым.Любое другое приложение, которое вы напишите, сможет легко вызывать, особенно если оно написано в .NET.

Я полагаю, что COM будет работать нормально, но мне нравится масштабируемость WCF, как будто вы должныВ конечном итоге эти приложения переносятся на отдельные серверы, и вам не нужно ничего менять, кроме URL.

В этом блоге есть хороший пример .Если вы используете PHP5, это должно быть пустяком, если вам нужно использовать 4, то это все равно будет возможно, но потребует немного больше работы.

...