System.Web.Services.Protocols.SoapException: Серверу не удалось обработать запрос .---> System.Data.SqlClient.SqlException:

1

У меня есть приложение для Android, в котором я хочу получить данные с SqlServer 2008.

Приложение android подключается к веб-службе, которая обращается к базе данных Sqlserver, я попытался вызвать метод getCommentsTest, который извлекает данные из базы данных, и я получил эту ошибку:

System.Web.Services.Protocols.SoapException: сервер не смог обработать запрос.---> System.Data.SqlClient.SqlException: не удается открыть базу данных "моя база данных", запрошенная логином. Ошибка входа в систему. Ошибка входа в систему пользователя "NT AUTHORITY\NETWORK SERVICE".

Зная, что я попытался просмотреть веб-сервис в браузере после его публикации, я вызвал функцию, и она сработала.

И вот код Android для вызова веб-службы:

public void callTestGetComments() {try {

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_GET_COMMENTS);

       request.addProperty("eID", 140);




        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet=true;
        envelope.setOutputSoapObject(request);

        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL_TEST);
        androidHttpTransport.call(SOAP_ACTION_GET_COMMENTS, envelope);

        Object result = (Object)envelope.getResponse();

        String xml=result.toString();
        Document doc=XMLfromString(xml);

        doc.getDocumentElement().normalize();

        //System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
        NodeList nList = doc.getElementsByTagName("Comment");
        //System.out.println("-----------------------");
                //String commentBody,userName;
                String commentBody="";

        for (int i = 0; i < nList.getLength(); i++) 
        {

           Node nNode = nList.item(i);
           if (nNode.getNodeType() == Node.ELEMENT_NODE) 
           {

              Element eElement = (Element) nNode;
                      //Comment c=new Comment();
             commentBody += getTagValue("comment", eElement);
              commentBody+= getTagValue("uPhone", eElement);
                  //System.out.println("Nick Name : " + getTagValue("nickname", eElement));
              //System.out.println("Salary : " + getTagValue("salary", eElement));
                      //comments.add(c);
           }
       // tv.setText(result.toString());
           tv.setText(commentBody);
        } 
    }
    catch (Exception e) {
        tv.setText(e.getMessage());
        }
}
Теги:
sql-server-2008
web-services

1 ответ

0

Это проблема, связанная с правами. Когда вы просматриваете веб-сервис в браузере, он просит вас войти в систему?

Какой метод вы используете, чтобы поговорить с веб-сервисом? Можете ли вы опубликовать этот код. Я хотел бы поспорить, что вы не передаете никаких учетных данных, но я не могу быть уверен, не видя кода.

У вас есть доступ к SQL-серверу? Если это так, вы проверили журналы ошибок для недопустимых логинов?

Основываясь на этом вопросе SO, нет простого способа аутентифицировать службу Windows, используя NTLM от android.

Неважно, что они представляют на сервере sql, поскольку с точки зрения устройства Android они не аутентифицированы.

  • 1
    Во-первых, браузер не попросил меня войти, так как мы настроили его для входа с использованием аутентификации Windows, и вот наша строка подключения: «источник данных =; начальный каталог = сканер; встроенная защита = true;» и я поставлю код Android для вызова веб-службы в вопросе.
  • 1
    Веб-служба обращается к базе данных, используя пользователя «NT AUTHORITY \ NETWORK SERVICE.», И этот пользователь является системным администратором в sqlServer.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню