2012-06-04 120 views
1

我有一個android應用程序,我想從SqlServer 2008中檢索數據。System.Web.Services.Protocols.SoapException:服務器無法處理請求.---> System.Data.SqlClient.SqlException:

Android的應用程序連接到訪問SQLSERVER數據庫, 我打過電話,從數據庫中檢索數據的方法「getCommentsTest」一個Web服務,我得到這個錯誤:

System.Web.Services.Protocols.SoapException :服務器無法處理 請求.---> System.Data.SqlClient.SqlException:無法打開數據庫「我的數據庫」 請求由lo杜松子酒。登錄失敗。用戶'NT AUTHORITY \ NETWORK SERVICE'登錄失敗。'

知道我在發佈它之後試圖在瀏覽器上查看Web服務,我調用了該函數並且它工作正常。

而這裏的機器人的代碼來調用Web服務:

公共無效callTestGetComments(){ 嘗試 {

 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()); 
     } 
} 

回答

0

這是相關問題上的權限。當您在瀏覽器中查看Web服務時是否要求您登錄?

你用什麼方法與web服務交談?你可以發佈該代碼嗎?我會願意打賭你沒有通過任何證書,但我不能確定沒有看到代碼。

你有權訪問SQL服務器嗎?如果是這樣你檢查錯誤日誌的無效登錄?

基於此SO question有沒有簡單的方法來驗證使用來自android的NTLM的Windows服務。

無論他們的用戶是在SQL服務器上,因爲從Android設備的角度來看,他們沒有通過身份驗證。

+1

首先,瀏覽器並沒有要求我登錄,因爲我們將其調整爲使用Windows身份驗證登錄,以下是我們的連接字符串: 「data source = .; initial catalog = crawler; integrated security = true;」 我將把android代碼調用問題中的Web服務。 –

+1

Web服務使用用戶訪問數據庫:'NT AUTHORITY \ NETWORK SERVICE。',並且此用戶是sqlServer中的系統管理員 –

+0

請參閱我的編輯... – bytebender

相關問題