2016-12-20 11 views
0

ローカルマシンでASP.NET C#コンソールアプリケーションやWebサービスのようなものを開発しなければなりません。 私は遠くにあるサーバーにウェブサイトを持っています。私はプリンタに接続されているローカルマシンも持っています。 タスクは以下の通りです。誰かがテキストボックスでウェブサイトにデータを入れ、適切なプリンタを選択して印刷を押します(したがって、Webサイトには、ローカルマシンに接続されている利用可能なプリンタの現在のリストが必要です)。ローカルマシンはデータを取得して出力し、確認を返します。ウェブAPIを使用してウェブサイトとローカルコンソールアプリケーションの間で通信する

私はウェブサイトとコンソールアプリケーションの間で通信するためにWeb APIを使用しています。

これは、Web APIは、今どのように見えるかです:

public class LabelController : UmbracoApiController 
{ 
    Label[] labels = new Label[] 
    { 
     new Label { Product="Black Top", Location="T1", VariantSKU="1111" }   
    }; 

    [HttpGet] 
    [ActionName("SendLabel")] 
    public Label SendLabel(Label currentLabel) 
    {    
     Label lbl = currentLabel; 
     return lbl;   
    } 

    [HttpGet] 
    [ActionName("SendAllLabels")] 
    public IEnumerable<Label> SendAllLabels() 
    { 
     return labels; 
    }    

    [HttpPost] 
    [ActionName("GetPrinters")] 
    public void GetPrinters([FromBody]string value) 
    { 
     //Here I should get the list of printers from the local machine 
    } 

} 

これは私がローカルマシンにラベルを送信するためにウェブサイトから呼び出そうとする方法である:

Label printlabel = new Label { Product = "Awesome T-Shirt", Location = "T1", VariantSKU = "0000000" }; 

     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri("http://localhost:49423/"); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      var webapi = new LabelController(); 
      webapi.SendLabel(printlabel); 

     } 

そして、これはありますコンソールアプリケーションでWeb APIをどのように使用するのですか。

public class Label 
{ 
    public string Product { get; set; } 
    public string Location { get; set; } 
    public string VariantSKU { get; set; } 
} 

class Program 
{ 
    static HttpClient client = new HttpClient(); 

    static void Main(string[] args) 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri("http://localhost:49423/"); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));    

      PrintData(); 
      PrinterList(); 
     } 
    }   

    static void PrintData() 
    { 
     try 
     { 
      HttpResponseMessage resp = client.GetAsync("umbraco/api/Label/SendLabel").Result; 
      resp.EnsureSuccessStatusCode(); 
      var label = resp.Content.ReadAsAsync<Label>().Result;   
      Console.WriteLine(label.Product); 

     } 

     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 
    } 

    private static async void PrinterList() 
    {   
     var printerQuery = new ManagementObjectSearcher("SELECT * from Win32_Printer"); 
     foreach (var printer in printerQuery.Get()) 
     { 
      var name = printer.GetPropertyValue("Name"); 
      var status = printer.GetPropertyValue("Status"); 
      var isDefault = printer.GetPropertyValue("Default"); 
      var isNetworkPrinter = printer.GetPropertyValue("Network"); 

      // Here I should send the parameters back to the website 
     } 
    } 

} 

私の問題は、私のラベルt o SendLabelアクションと私は、コンソールアプリケーションからウェブサイトにデータを送信する方法を知らない。

ありがとうございます!

答えて

2

コンソールアプリケーションでWCFサービスをホストすることができます。このサービスはプリンタのリストを返します。あなたのWeb APIはこのWCFサービスを消費してプリンタを入手できます。 WCFサービスは、メソッドを持つことができます。

  • GETPRINTERS
  • 印刷

成功し印刷した後、あなたのコンソールアプリケーションは、確認のためのWeb APIを呼び出すことができます。

+0

こんにちはを使用して、ユーザーにメッセージを送信見つけた場合

  • はあなたの窓サービスのごonstartMethod()でフラグの値をチェックしてください! WCFサービスは、問題全体をはるかに簡単にしました。もうWeb APIは必要ありません。ありがとう:) –

  • 0

    ここであなたのバックグラウンドプロセスが必要です。バックグラウンドプロセスは1秒ごとにデータベースをチェックします。バックグラウンドプロセスがテーブルに新しいデータを見つけたら、あなたのメッセージをあなたのUser.butに送信できますか?すべての最初の は

  • onStartMethod()であなたとの接続のデータベースを作成し、あなたのウィンドウのサービスでスレッドを作るのVisual Studio

    1. を使用して、ウィンドウのサービスを作成します。フラグを設定します(新しいレコードが入力された識別のために、)あなたを通してウェブサイトあなたは値がWEBAPI
  • 関連する問題