有人请帮助我,我一直在尝试,但无法找出为什么我无法获得结果。
我创建了这个java springboot Web服务,当我运行java应用程序时,将打开一个Web浏览器页面,当我输入URL时,例如localhost:8080/runbatchfileparam/test.bat
程序将首先检查test.bat文件是否存在。如果是这样,网页将显示 JSON 结果{“Result”: true}
,并且将执行批处理文件中的命令。如果不存在,网页将显示{“Result”: false}
。
我想创建一个 ASP.NET Web 服务,该服务将使用在 java Web 服务中创建的函数。当我运行 ASP.NET Web 应用程序时,将打开一个 Web 浏览器页面。用户将输入如下所示的 URL:localhost:12345/api/callbatchfile/test.bat
。Java Web 服务应该正在运行,当我运行 C# ASP.NET Web 应用程序时,我也应该获得{“Result”: true}
或{“Result”: false}
。
但是我只得到一个空的{},括号内没有任何内容。为什么会这样?
这是我的代码 ASP.NET
测试控制器.cs
private TestClient testClient = new TestClient();
public async Task<IHttpActionResult> GET(string fileName)
{
try
{
var result = await testClient.runbatchfile(fileName);
var resultDTO = JsonConvert.DeserializeObject<TestVariable>(result);
return Json(resultDTO);
}
catch (Exception e)
{
var result = "Server is not running";
return Ok(new { ErrorMessage = result });
}
}
测试变量.cs
public class TestVariable
{
public static int fileName { get; set; }
}
测试客户端.cs
private static HttpClient client;
private static string BASE_URL = "http://localhost:8080/";
static TestClient()
{
client = new HttpClient();
client.BaseAddress = new Uri(BASE_URL);
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
}
public async Task<string> runbatchfile(string fileName)
{
var endpoint = string.Format("runbatchfile/{0}", fileName);
var response = await client.GetAsync(endpoint);
return await response.Content.ReadAsStringAsync();
}
WebApiConfig.cs
config.Routes.MapHttpRoute(
name: "TestBatchClient",
routeTemplate: "api/runbatchfile/{fileName}",
defaults: new { action = "GET", controller = "Test" }
);
有人请帮助我。非常感谢。
编辑
爪哇网络服务
应用.java
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
批处理文件控制器.java
private static final String template = "Sum, %s!";
@RequestMapping("/runbatchfile/{param:.+}")
public ResultFormat runbatchFile(@PathVariable("param") String fileName) {
RunBatchFile rbf = new RunBatchFile();
return rbf.runBatch(fileName);
}
结果格式
private boolean result;
public ResultFormat(boolean result) {
this.result = result;
}
public boolean getResult() {
return result;
}
运行批处理文件.java
public ResultFormat runBatch(String fileName) {
String var = fileName;
String filePath = ("C:/Users/attsuap1/Desktop/" + var);
try {
Process p = Runtime.getRuntime().exec(filePath);
int exitVal = p.waitFor();
return new ResultFormat(exitVal == 0);
} catch (Exception e) {
e.printStackTrace();
return new ResultFormat(false);
}
}
我不确定这是否有帮助......但我怀疑 AsyncTask 并没有真正执行......
var result = await testClient.testCallBatchProject(fileName);
我会尝试如下:
await testClient.testCallBatchProject(fileName).Delay(1000);
你能尝试检查同步调用是否也会发生同样的情况吗?..如果是这样,我们可以将上述内容归零。