以下是我的情况说明:我有两个Web API服务。第一个服务有一个方法,用于处理一些数据,当部分数据准备好后,它将其推送到流中。
public HttpResponseMessage Get( )
{
var response = Request.CreateResponse( );
response.Content = new PushStreamContent( WriteToStream );
return response;
}
public async void WriteToStream( Stream outputStream, HttpContent content, TransportContext context )
{
.......
}
第二个Web API 在控制器中有一个方法,调用第一个Web API。它必须从流中读取数据并对其进行处理,并将其放入自己的流中:
public HttpResponseMessage Get( )
{
Stream stream = null;
using( HttpClient httpClient = new HttpClient( ) )
{
httpClient.Timeout = TimeSpan.FromMilliseconds( Timeout.Infinite );
HttpRequestMessage request = new HttpRequestMessage( HttpMethod.Get, "http://localhost/fistWebApi/" );
var response = httpClient.SendAsync( request, HttpCompletionOption.ResponseContentRead );
var content = response.Result.Content.ReadAsStreamAsync( );
stream = content.Result;
}
var msg = Request.CreateResponse( );
msg.Content = new PushStreamContent( WriteToStream );
return msg;
}
public async void WriteToStream( Stream outputStream, HttpContent content, TransportContext context )
{
.......
}
问题在于我不知道如何同步调用
SendAsync
和 ReadAsStreamAsync
。现在,代码不会等待,当尝试使用 stream
时,它并没有正确初始化。我希望第二个方法的代码等待第一个方法将数据的一部分放入流中。我尝试过使用 ContinueWith
,但是我无法做到这一点。如果有任何问题,请告诉我,我会详细解释。
HttpSelfHostConfiguration
对象的超时时间,否则持续时间超过60秒的请求将失败。 - Master_T