Stream Read/Write Timeout causes Invalid Operation

2019-05-18 16:17发布

问题:

I am trying to get a request from an API using:

RestClient client = new RestClient("https://gds.eligibleapi.com/v1.5/coverage/all?api_key="
    + apiSecret + "&payer_id=" + payerID + "&service_provider_organization_name=" + 
    providerOrgName + "&provider_npi=" + NPI + "&member_id=" + ptPolicyID + 
    "&member_first_name=" + ptFirstName + "&member_last_name=" + ptLastName 
    + "&member_dob=" + ptDOB + &date=" + DOS + "&service_type=" + serviceType +
    "&format=x12");

var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
string response271 = response.Content;
Stream response271Stream = StringStream.GenerateStreamFromString(response271);

I keep getting the error on the Line:

Stream response271Stream = StringStream.GenerateStreamFromString(response271)

That says:

'response271Stream.ReadTimeout' threw an exception of type System.InvalidOperationException'

And here is a picture for reference:

This is just one of a few calls I want to use with this API. Can anyone help me figure out why it failed upon my request to Stream the API's response? Thanks!

回答1:

For anyone who comes to this page, The issue was an unexpected null variable which went unhandled in the API. Without a response, the request was timing out. My fix was to first, try to allow for timeouts with my client. Once in place, I was able to narrow down issue to the data itself and there was my problem.

This answer is coming back very late, but I will try to get to questions anyone might have regarding my answer in the future.



回答2:

As you can see in your screenshot, the CanTimeout property is false. So these properties are supposed to throw an exception; from the msdn page of Stream:

Notes to Inheritors:

The ReadTimeout property should be overridden to provide the appropriate behavior for the stream. If the stream does not support timing out, this property should raise an InvalidOperationException

Keep in mind that you're looking at the debugger looking at the stream - the exception won't be thrown in your application until you actually touch the timeout properties.