我有一个控制器(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?
答案 0 :(得分:0)
每次向您的api发出的请求都会获得一个新的控制器实例和自己的线程,因此您不必担心将byte []转换为文件并保存该文件阻止来电请求。
可以在此处找到对此的引用:http://blogs.msdn.com/b/roncain/archive/2012/07/16/dependency-injection-with-asp-net-web-api-and-autofac.aspx