如何使用WebApi管理应用程序之间的byte []参数

时间:2015-06-05 16:37:09

标签: c# .net asynchronous asp.net-web-api

我有一个控制器(ApiController),可以接收XML作为参数。其中一个节点是byte [](文档)此服务内置在.Net中,但另一家公司将使用我的Java平台服务。

我们希望避免通过从Java应用程序接收许多请求来阻止.Net中的服务(这必须是异步的)因此Java应用程序可以向包含byte []节点的xml发送多个请求。我不知道Java应用程序必须如何管理此调用,但在.net中我们希望继续始终可用。

我一直在阅读新的异步等待关键字,我不太确定它是否必须适用于我的控制器上的服务。

我的控制器目前看起来像这样:

public class MyController : ApiController

    [HttpPost, ActionName("myMethod")]
    public void MyMethod(HttpRequestMessage request)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(request.Content.ReadAsStreamAsync().Result);
        //do something...
        //call method to transform byte[] to physical file and save it
    }

我一直在.Net中的另一个应用程序(客户端)进行测试,如下所示:

    private void button1_Click(object sender, EventArgs e)
    {
        TestMethod();
    }

    public async Task TestMethod()
    {
        string xml = "<root> .......";
        var content = new StringContent(xml, Encoding.Unicode);
        var client = new HttpClient();
        HttpResponseMessage result = await client.PostAsync("http://localhost:port/api/myController/myMethod", content);
    }

工作正常。我的意思是在同一个按钮上多次单击并且它会在一定程度上延迟(物理上)正确创建我的文件,因为文件大小但客户端应用程序永远不会被阻止。但是我不太确定客户端是否必须异步运行它,或者服务必须准备好自己执行它,而Java中的客户端必须只通过http来执行请求。

甚至,我必须将文件从byte []转换为物理文件async?

1 个答案:

答案 0 :(得分:0)

每次向您的api发出的请求都会获得一个新的控制器实例和自己的线程,因此您不必担心将byte []转换为文件并保存该文件阻止来电请求。

可以在此处找到对此的引用:http://blogs.msdn.com/b/roncain/archive/2012/07/16/dependency-injection-with-asp-net-web-api-and-autofac.aspx