0

Я пытаюсь использовать веб-службу HTTP, возвращающую XML, сгенерированный DataContractSerializer в приложении C# Desktop. Ссылка на услугу не имеет расширения aspx или svc, и параметры ожидаются в ссылке.Как использовать веб-сервис с рабочего стола C# app?

https://sourcesite.com/api/external/v1/Snapshot?isConfirmed= {isConfirmed} & sinceDate = {sinceDate} & PageNumber = {PageNumber} & recordsPerPage = {recordsPerPage}

Он работает, когда я использую его в браузере (после предоставления надлежащих значений параметров). Когда он запускался в первый раз, он спрашивал мои учетные данные, которые он принял и не спрашивал снова, даже после перезапуска браузера.

Я пытался добавить веб-ссылку (с помощью VS2013), используя URL без параметров, но я получаю сообщение об ошибке:

The remote server returned an unexpected response: (405) Method Not Allowed.

Если добавить жёстко прописанные параметры, я получаю:

The document at the url https://sourcesite.com/api/external/v1/Snapshot?isConfirmed=True was not recognized as a known document type. The error message from each known type may help you fix the problem: - Report from 'XML Schema' is 'Data at the root level is invalid. Line 1, position 1.'. - Report from 'DISCO Document' is 'Data at the root level is invalid. Line 1, position 1.'. - Report from 'WSDL Document' is 'There is an error in XML document (1, 1).'. - Data at the root level is invalid. Line 1, position 1. Metadata contains a reference that cannot be resolved: 'https://sourcesite.com/api/external/v1/Snapshot?isConfirmed=True'. The remote server returned an unexpected response: (405) Method Not Allowed. The remote server returned an error: (405) Method Not Allowed. If the service is defined in the current solution, try building the solution and adding the service reference again.

Неправильно ли настроен сервис, или я что-то упускаю? Возможно, есть другой способ подключиться к этой службе с кодом?

ответ

0

«Добавить ссылку на службы» и «Добавить веб-ссылку» предназначены для веб-служб SOAP.

Вам нужно будет использовать класс WebClient и «сделайте это сами».

+0

Спасибо за ответ. Я направлю свои исследования на это. – Lukasz

0

я наконец получил эту работу:

 var netCred = new NetworkCredential { UserName = "user1", Password = @"pass1" }; 
     WebClient proxy = new WebClient(); 
     proxy.Credentials = netCred; 

     //Method 1 - Newtonsoft.Json 


      string serviceURL = 
       string.Format("https://sourcesite.com.com/api/external/v1/Snapshot-Accrual?isConfirmed=" 
       + Confirmed.ToString() + "&sinceDate=" + String.Format("{0:yyyy-MM-dd}", SinceDate); 
      data = proxy.DownloadData(serviceURL); 
      jsonString = Encoding.ASCII.GetString(data); 

      ac1 = Newtonsoft.Json.JsonConvert.DeserializeObject<SnapshotAccruals>(jsonString); 

Теперь, если бы я только знал, как запрашивать учетные данные вместо жесткого кодирования их, я бы установить. Я знаю, что если я вставляю serviceURL непосредственно в браузер, он будет запрашивать у меня учетные данные. Если я опускаю их в код, я получаю (401) Несанкционированный.