我必须在本地计算机上开发类似ASP.NET C#控制台应用程序或Web服务的东西,它能够从网站获取数据并发送回来。 我的网站在远离我的服务器上。我还有一台连接到打印机的本地机器。 任务如下:有人在文本框中将一些数据放在网站上,选择正确的打印机并按下打印(因此网站需要连接到本地计算机的可用打印机的当前列表)。本地机器获取并打印出数据,然后发回一些确认信息。
我正在使用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
}
}
}
我的问题是我无法将标签放到SendLabel操作中,而且我不知道如何将数据从控制台应用程序发送到网站。
谢谢!
答案 0 :(得分:2)
您可以在控制台应用程序中托管WCF服务。此服务将返回打印机列表。您的web api可以使用此WCF服务来获取打印机。 WCF服务可以有方法:
成功打印后,您的控制台应用程序可以调用Web API进行确认。
答案 1 :(得分:0)
在这里您需要后台流程,后台流程会在每一秒后检查您的数据库,当后台流程在您的表格中找到任何新数据时,您可以将您的消息发送给您的用户。但问题是如何可能的? 首先使用visual studio创建窗口服务