我有一个Android应用程序,我想从SqlServer 2008检索数据.
android应用程序连接到访问Sqlserver数据库的Web服务,我尝试调用从数据库检索数据的方法“getCommentsTest”,但收到以下错误:
System.Web.Services.Protocols.SoapException:服务器无法处理请求。---〉系统。数据。SqlClient.SqlException:无法打开登录所请求的数据库“my database”。登录失败。用户'NT AUTHORITY\NETWORK SERVICE'的登录失败。
知道我在发布后试图在浏览器上查看Web服务,我调用了该函数,它工作了。
下面是调用Web服务的android代码:
公共void调用测试获取评论(){ 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());
}
}
1条答案
按热度按时间h9vpoimq1#
这是与权限相关的问题。当您在浏览器中查看Web服务时,它是否要求您登录?
你用什么方法来和网络服务对话?你能把代码贴出来吗?我敢打赌你没有传递任何凭证,但是我不能肯定没有看到代码。
您是否可以访问SQL服务器?如果可以,您是否检查了错误日志中的无效登录?
基于此SO question,没有简单的方法可以从Android使用NTLM对Windows服务进行身份验证。
他们在sql server上使用什么并不重要,因为从android设备的Angular 来看,他们没有经过身份验证。