Как использовать WCF Rest Service с Android

Вот фрагмент кода, в котором я подключаюсь к своей службе WCF.

DefaultHttpClient client = new DefaultHttpClient();         
                            HttpGet request = new HttpGet(EMPLOYEE_LOG_IN);
                            request.setHeader("Accept", "application/json");
                            request.setHeader("Content-type", "application/json");          
                            HttpResponse response = client.execute(request);
                            HttpEntity entity = response.getEntity();
                            if(entity.getContentLength() != 0) {
                                Reader employeeReader = new InputStreamReader(response.getEntity().getContent());       
                                                //create a buffer to fill if from reader            
                                                char[] buffer = new char[(int) response.getEntity().getContentLength()];        
                                                //fill the buffer by the help of reader         
                                                employeeReader.read(buffer);                
                                                //close the reader streams              
                                                employeeReader.close(); 
                                                //for the employee json object              
                                                JSONObject employee =  new JSONObject(new String(buffer));
                                                Log.d("Response",employee.getString("FirstName"));    

В разных ситуациях он ведет себя по-разному. Вот код из моей службы WCF

 public Controller GetEmployees(int personalNUmber)
        {                

                return new Controller
                            {
                                EmployeeId = 1,
                                FirstName = "FirstName",
                                LastName = "LastName"
                            };    
            }
        }

Итак, когда я вызываю этот метод, все работает нормально, я хорошо получаю формат json, но когда я отредактировал свой метод и подключился к Entity DB, как это

FineReceiptsTestEntities _entity = new FineReceiptsTestEntities();

        var t = _entity.Employees.FirstOrDefault(x => x.EmployeeID == personalNUmber);
        return new Controller
                   {

                       EmployeeId = 1,
                       FirstName = t != null ? t.Name : " ",
                       LastName = "LastName"
                   }; 

Объект Json не вернулся. Вернул только html-контент с ошибкой, подобной этой

Сервер обнаружил ошибку при обработке запроса. См. страницу справки службы, чтобы создать допустимые запросы к службе.

Но оба типа методов в браузере работают нормально и возвращают соответствующие данные.

а вот мой web.config

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>
    </compilation>
  </system.web>
  <system.serviceModel>
    <standardEndpoints>
      <webHttpEndpoint>
        <standardEndpoint helpEnabled="true" automaticFormatSelectionEnabled="true" />
      </webHttpEndpoint>
    </standardEndpoints>
    <services>
      <service name="dev_FineReceiptsService.ControllersInfo">
        <endpoint kind="webHttpEndpoint" contract="dev_FineReceiptsService.IControllersInfo" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>
  <connectionStrings>
    <add name="FineReceiptsTestEntities" connectionString="metadata=res://*/FineTest.csdl|res://*/FineTest.ssdl|res://*/FineTest.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=msdev01;Initial Catalog=FineReceiptsTest;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

Так может ли кто-нибудь сказать мне, в чем проблема при использовании Entity для извлечения данных?


person Big.Child    schedule 05.10.2012    source источник
comment
Я использовал этот пример wyousuf.wordpress.com / 2012/03/01 / android-with-wcf-services / и работал нормально, но когда я пытаюсь получить данные с помощью Entity Framework, не работает. Пожалуйста, помогите, как получить данные с помощью entity framework в Android.   -  person Big.Child    schedule 08.10.2012


Ответы (1)


В вашем сообщении недостаточно информации, чтобы определить причину. Вы должны опубликовать ответ RAW HTTP, чтобы кто-нибудь вам помог. Сервер, вероятно, возвращает HTTP 415, поскольку вы неправильно строите запрос.

request.setHeader("Content-type", "application/json");          

Вы устанавливаете тип содержимого json для запроса GET. Это невозможно. Сервер может попытаться сопоставить это и запутаться. Также может быть, что сервер имеет подлинную ошибку HTTP 500 из запроса. Судя по тому, как создается ошибка ответа, служба, похоже, жалуется на то, что сам запрос недействителен.

server encountered an error processing the request.Please see the service help page for constructing valid requests to the service.
person Deepak Bala    schedule 14.10.2012