无法从java Web服务获取数据

时间:2018-01-24 07:00:28

标签: java c# asp.net web-services batch-file

有人请帮助我,我一直在努力,但无法找出为什么我无法得到结果。

我创建了这个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中的代码

TestController.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 });
        }
    }

TestVariable.cs

public class TestVariable
{
    public static int fileName { get; set; }       
}

TestClient.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 Web服务

Application.java

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}

BatchFileController.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);
}

的resultFormat

private boolean result;

public ResultFormat(boolean result) {
    this.result = result;
}

public boolean getResult() {
    return result;
}

RunBatchFile.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);
    }
}

1 个答案:

答案 0 :(得分:0)

我不确定这是否有帮助..但我怀疑AsyncTask并没有真正执行......

var result = await testClient.testCallBatchProject(fileName);

我会尝试类似下面的内容:

await testClient.testCallBatchProject(fileName).Delay(1000);

您可以尝试检查同步呼叫是否会发生同样的情况吗? ..如果确实如此,我们可以将上述内容归零。