本教程将展示如何在c# . net Core控制台应用程序中使用LEADTOOLS云服务对任务进行排队。
| 概述 | |
|---|---|
| 总结 | 本教程介绍如何制作队列在c# . net核心控制台应用程序中使用LEADTOOLS云服务请求并处理结果。 |
| 完成时间 | 30分钟 |
| 项目 | 下载教程项目(2kb) |
| 平台 | LEADTOOLS云服务API |
| IDE | Visual Studio 2019 |
| 语言 | c# .NET核心 |
| 开发许可 | 下载LEADTOOLS |
| 用另一种语言试试 |
请务必查看以下站点,以获得有关LEADTOOLS云服务API的信息。
LEADTOOLS服务计划提供:
| 服务计划 | 描述 |
|---|---|
| 免费试用 | 免费评估 |
| 页面包 | 预付费页包 |
| 订阅 | 预付月处理页 |
要进一步了解这些产品,请参阅托管云服务页面。
如需获取应用ID和应用密码,请参见使用LEADTOOLS托管云服务创建帐户和应用程序.
在Visual Studio中,创建一个新的c# .NET核心控制台项目,并添加以下所需的NuGet包:
Newtonsoft。Json创建项目并添加包之后,就可以开始编码了。
在解决方案资源管理器,打开Program.cs.将下列语句添加到使用顶部的块。
//在顶部使用块使用Newtonsoft.Json;使用Newtonsoft.Json.Linq;使用系统;使用System.Collections.Generic;使用System.Net;使用System.Net.Http;使用System.Net.Http.Headers;使用包含;使用System.Threading.Tasks;
添加一个名为hostedServicesUrl和async Task调用队列().Queue任务执行还是请求到LEADTOOLS云服务API。如果成功,将返回一个GUID供项目稍后使用。
私人字符串hostedServicesUrl =“https://azure.leadtools.com/api/”;公共异步任务队列(){var客户端= InitClient();//如果使用URL到文件字符串fileURL =“http://demo.leadtools.com/images/cloud_samples/ocr1气管无名动脉瘘管的- 4.”;字符串uploadUrl =字符串.Format (“还是?fileurl = {0} ", fileURL);var结果=等待客户端。PostAsync (uploadUrl零);/*//如果上传文件为多部分内容:HttpContent byteccontent = new ByteArrayContent(file . readallbytes (@"path/to/file"));byteccontent . headers . contentdisposition = new ContentDispositionHeaderValue("form-data"){Name = "attachment",文件名= "file-name"};var formData = new MultipartFormDataContent();formData。Add (byteContent formFieldName);string uploadUrl = "UploadFile";Var结果=等待客户。PostAsync (uploadUrlformData);formData.Dispose ();* /如果(结果。StatusCode == HttpStatusCode.OK){//服务返回的唯一ID字符串id = await result.Content.ReadAsStringAsync();控制台。WriteLine (服务返回的唯一ID:+ id);等待CheckFileForVerification(id,客户端);}其他的控制台。WriteLine ("请求失败,响应如下"+ result.StatusCode);}
在本例中,我们将首先对ExtractText返回的GUID还是在队列的任务。核实后ExtractText请求已排队,我们将排队一个转换请求将文件转换为TIFF格式。
创建方法HttpClient客户端和方法HttpClient客户端就在下面队列方法。
私人异步任务字符串HttpClient客户端{//文件中要标记进行处理的第一页intfirstPage = 1;//发送一个-1的值将指示服务应该处理文件中的所有页面。intlastPage = -1;字符串recognitionUrl =字符串.Format (“认可/ ExtractText吗?珍宝= {0}&lastPage = {1} guid = {2} ", firstPage, lastPage, id);var结果=等待客户端。PostAsync (recognitionUrl零);如果(结果。StatusCode == HttpStatusCode.OK)等待QueueConversion(id,客户端);其他的控制台。WriteLine ("请求失败,响应如下"+ result.StatusCode);}私人异步任务字符串HttpClient客户端{//文件中要标记进行处理的第一页intfirstPage = 1;//发送一个-1的值将指示服务应该处理文件中的所有页面。intlastPage = -1;//文件输出格式对应的枚举。对于这个脚本,我们将转换为tif。intfileFormat = 4;字符串conversionUrl =字符串.Format (“转换/转换?珍宝= {0}&lastPage = {1} guid ={2}格式= {3}", firstPage, lastPage, id, fileFormat);var结果=等待客户端。PostAsync (conversionUrl零);如果(结果。StatusCode == HttpStatusCode.OK)运行(id,客户端);其他的控制台。WriteLine ("转换请求未能与以下响应排队:"+ result.StatusCode);}
与QueueExtractText而且QueueConversion队列,我们可以处理它们运行请求。
请注意这将标记该文件已准备好进行处理。一旦一个文件被标记为处理,或者已经完成处理,就不能在该文件上排队或运行进一步的请求。
创建方法HttpClient客户端这个方法private async Task CheckFileForVerification(string id, HttpClient client).的CheckFileForVerification方法由队列方法确认上传请求并启动QueueExtractText.
私人异步任务运行(字符串HttpClient客户端{字符串uploadUrl =字符串.Format (“跑?id = {0} "、身份证);var结果=等待客户端。PostAsync (uploadUrl零);如果(结果。StatusCode == HttpStatusCode.OK)查询(id,客户端);其他的控制台。WriteLine ("请求失败,响应如下"+ result.StatusCode);}私人async任务CheckFileForVerification(字符串HttpClient客户端{字符串queryUrl =字符串.Format (“查询?id = {0} "id.ToString ());var结果=等待客户端。PostAsync (queryUrl零);varreturnedContent = await result.Content.ReadAsStringAsync();var返回数据= JObject.Parse(返回内容);varfileStatus = (int) returnedData。SelectToken (“FileStatus”);如果(fileStatus == 123){//文件仍在验证中。我们将每半秒检查一次,以确保文件已经过验证等待Task.Delay (500);查询(id,客户端);返回;}如果(fileStatus == 122)QueueExtractText (字符串HttpClient客户端);其他的控制台。WriteLine ("文件状态验证失败:"+ fileStatus);}
接下来,创建一个名为查询(字符串id, HttpClient),如果成功,响应体将包含所有JSON格式的请求数据。
私人async任务查询(字符串HttpClient客户端{字符串queryUrl =字符串.Format (“查询?id = {0} "id.ToString ());HttpResponseMessage结果;字符串returnedContent;JObject returnedData;intfileStatus;做{结果=等待客户端。PostAsync (queryUrl零);returnedContent = await result.Content.ReadAsStringAsync();返回数据= JObject.Parse(返回内容);fileStatus = (int) returnedData。SelectToken (“FileStatus”);//文件仍在处理中——在再次尝试之前,我们将使当前线程休眠5秒。等待Task.Delay (5000);}而(fileStatus == 100);控制台。WriteLine ("文件已完成处理,返回代码:"+ returnedData。SelectToken (“FileStatus”));如果((int) returnedData。SelectToken (“FileStatus”) = 200)返回;ParseJson (returnedData。SelectToken (“RequestData”) .ToString ());}
然后,创建函数ParseJson (json字符串)来处理返回的JSON数据。
私人无效ParseJson (字符串json){JArray requestArray = jray . parse (json);foreach(varrequestReturn在requestArray){控制台。WriteLine (“服务类型:”+ requestReturn。SelectToken (“ServiceType”));控制台。WriteLine (返回的数据:“);Console.WriteLine ();如果(requestReturn。SelectToken (“ServiceType”) .ToString () = =“转换”){varUrlArray = JArray.Parse(requestReturn.SelectToken(“url”) .ToString ());foreach(varobj在UrlArray)Console.WriteLine (obj.ToString ());}其他的{控制台。WriteLine (返回的数据:“+ requestReturn。SelectToken (“数据”));}控制台。WriteLine ("***********************************************");}}
最后,创建函数InitClient ()来创建一个客户端连接来请求GUID和JSON数据。
私人HttpClient InitClient (){字符串AppId =“替换为应用程序ID”;字符串密码=“替换为应用程序密码”;HttpClient客户端=新HttpClient ();客户端。BaseAddress =新Uri (hostedServicesUrl);client.DefaultRequestHeaders.Accept.Clear ();client.DefaultRequestHeaders.Accept.Add (新MediaTypeWithQualityHeaderValue (“application / json”));字符串authData =字符串.Format (“{0}:{1}”, AppId,密码);字符串authHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(authData));client.DefaultRequestHeaders.Authorization =新AuthenticationHeaderValue (“基本”, authHeaderValue);返回客户端;}
为了测试运行此代码,请务必添加.GetResults .GetAwaiter队列()()();到静空部分。
按下运行项目F5,或选择Debug ->开始调试.
如果正确地执行了这些步骤,将出现控制台,应用程序将显示来自队列任务的JSON数据结果。
本教程展示了如何通过LEADTOOLS云服务API对任务进行排队。