2016-01-27 2 views
0

Я использую RestSharp для связи с веб-сервисом.RestSharp - Service Unavailable - Максимальное количество активных клиентов достигло

Я использую этот код

public static object GetTagValue(string url, string tagname, out string resp) 
{ 
    object result = null; 
    resp = string.Empty; 
    string theReq = string.Format("tags/{0}", tagname); 
    var client = new RestClient(url); 

    var request = new RestRequest(theReq, Method.GET); 
    request.RequestFormat = DataFormat.Json; 

    IRestResponse response = client.Execute(request); 
    resp = response.Content; 
    if (!string.IsNullOrWhiteSpace(resp)) 
    { 
     dynamic json = JValue.Parse(resp); 
     if (null != json.value) 
     { 
      result = json.value; 
     } 
    } 
    return result; 
} 

вызовов на сервер

GET http://ame-hp/tags/int32 HTTP/1.1

Accept: приложения/JSON, приложение/XML, текст/JSON, текст/x-json, текст/javascript, текст/xml

User-Agent: RestSharp/105.2.3.0

Ведущий: AME л.с.

Accept-Encoding: GZIP, выкачать

ответ от сервера для рабочего вызова:

HTTP/1.1 200 Ok

Сервер: интернет-пакет HTTP-сервер

соединения: Закрыть

Set-Cookie: SID = f11985564d; Истекает = Пт, 27 Jan 2017 07:52:17 GMT ; Path =/

Content-Type: применение/JSon

Content-Length: 133

{ "качество": "Хорошее", "описание": "", "название": "Int32", "значение": 0, "Datatype": "Int32",» контроллеры ": []," initialValue ": null," readonly ": false}

Это работает, но после двух звонков сервисных ответов с этим

{"Code":503,"Message":"Service Unavailable - Maximum number of active clients reached."} 

Третьим вызовом к серверу

GET http://ame-hp/tags/int32 HTTP/1.1

Accept: приложения/JSON, приложение/xml, text/json, text/x-json, Текст/javascript, текст/xml

User-Agent: RestSharp/105.2.3.0

Ведущий: AME л.с.

Accept-Encoding: GZIP, выкачать

Connection: Keep-Alive

ответ от сервера для всех вызовов, с этого момента и до сервера возобновляется

HTTP/1.1 503 Услуга недоступна - Максимальное количество активных cl ients .

Сервер: Интернет пакет HTTP Server

Connection: Keep-Alive

Content-Type: приложения/JSON

Content-Length: 88

{ "Код": 503, «Сообщение»: «Служба недоступна - достигнуто максимальное количество активных клиентов ».}

Поэтому я предполагаю, что у службы есть предел двух клиентов. Но почему существуют два активных клиента?

Либо сервер, либо RestSharp не закрывают соединение, но что?

Есть что-то, что я могу сделать в RestSharp, чтобы закрыть соединение?

ответ

0

Проблема заключалась, как я предполагал, в том, что сервер разрешает только двум клиентам. При первом подключении сеансовое cookie отправляется обратно, и это нужно использовать для остальных вызовов.

В RestSharp вам нужно всего лишь добавить одну строку, чтобы это произошло

После создания клиента (который, кстати, вам нужно повторно использовать для всех вызовов). Вы добавляете следующую строку:

client.CookieContainer = new System.Net.CookieContainer(); 

инициализации клиента будет

client = new RestClient(); 
client.CookieContainer = new System.Net.CookieContainer(); 

Тогда вы можете использовать

client.BaseUrl = new Uri(url); 

Чтобы задать URL, который вы хотите позвонить

Смежные вопросы