2011-09-07 20 views
0

複数のデバイスをポーリングしてデータを収集し、その情報をデータベースに格納するC#で書いたコンソールアプリケーションがあります。アプリケーションは私たちのWebサーバー上で動作し、コマンドコンソールからメソッド呼び出しを呼び出す方法が不思議でした。(コンソールアプリケーションで読み込まれるphpコマンドを実行できます。シェルコマンドも同様に動作します)現在実行中のコンソールアプリケーションでメソッドを呼び出します。

誰でもアイデアがありますか?私は「google」の周りに浮かんでいて、私の現在のニーズを満たすものは何も見つかりませんでした。

また、ここでオーバーホールが必要な場合は、コンソールアプリケーションを変更することに悪影響を及ぼしません。回答がCOM Interopの場合は、PHP/Apache2からビルドして呼び出す方法の良い例を提供してください。

+1

コンソールアプリケーションにWCFサーバーを追加して、そこにロジックを呼び出すためにget HTTP get要求を出すのはどうですか? – Kolja

+0

シェルスクリプト経由でアプリケーションからパブリックメソッドを呼び出す方法はありませんか? – rlemon

+1

簡単な方法ではないため、コンソールアプリケーションは分離された独自のAppDomainで動作します。そのメソッドを呼び出すには、それを共有する必要があります。 – Kolja

答えて

1

あなたはこのようなサービスを作成できます。

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

} 

そして、このようなサービスの実装:

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(); 

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

は、HTTPサービスを開始すると、それは次のようになります。

これはポート8080でHTTPサーバーを起動します。 HTTP Get rメソッド呼び出しを呼び出すための 'http:// localhost:8080/magic'にします。

+0

どのアセンブリを参照する必要がありますか?私は3.5フレームワークを使用しています。 System.ServiceModelにすべての定義が含まれていません。 – rlemon

+0

アセンブリが間違っている場合は、このコードを使用できません。私は周りを見回し、適切なアセンブリを見つけることができません.. – rlemon

+0

彼らは "間違っていない"。 WebServiceHostのような参照が依然として必要なクラスを見た場合、[Googleの最初の結果](http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webservicehost.aspx)どのような組立が必要かを示していたでしょう。 System.ServiceModel.Webを追加します。 – Kasaku

1

おそらく、あなたのコンソールアプリケーションは特定のファイルのディレクトリをポーリングし、それに反応することがあります。

あなたのPHPアプリケーションはそのファイルを作成する必要があり、コンソールアプリケーションはそれを気付き、必要なものを実行する必要があります。私は本当にあなたがしたいことはよく分かりません。

0

WCFを使用します。あなたのC#アプリケーションはWCFサービスをホストし、それからあなたのPHPアプリケーションはそれを呼び出すことができます。私はPHP5がこれを比較的簡単にするSOAPライブラリを持っていると信じています。あなたが書いた他のアプリケーションは、特に.NETで記述されている場合は、簡単に呼び出すことができます。

COMは正常に動作すると思いますが、これらのアプリケーションを別々のサーバーに移動しなければならないかのようにWCFのスケーラビリティーが好きです。URL以外には何も変更する必要はありません。

on this blogという良い例があります。あなたがPHP5を使用している場合は、それはdoddleでなければなりません、あなたが4を使用しなければならない場合、それはまだ可能ですが、ちょっとだけ足を掛けてください。

関連する問題