через несколько дней мне удалось создать веб-службу asmx на Asp. net и использовать ее с Java Android. Теперь я хочу обезопасить доступ. Webservice.asmx находится внутри защищенной области моего веб-сайта. Область защищена с помощью формы аутентификации (пользователи / роли / членство).
Это сервисный код:
Namespace dbwebservice
<WebService(Namespace:="Http://namespace.it/")>
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)>
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
<System.Web.Script.Services.ScriptService()>
Public Class contapeopleWebService
Inherits System.Web.Services.WebService
<SoapRpcMethod(), WebMethod()>
Public Function Downloadvalori(ByVal postazioneId As String) As String
Dim eventi As List(Of conta_sqlfields) = New List(Of conta_sqlfields)()
Dim evento
Dim connstring = ConfigurationManager.ConnectionStrings("contaSQL").ConnectionString
Dim conness As New Data.SqlClient.SqlConnection(connstring)
Dim command As String = "[dbo].[conta_leggieventi]"
Dim myOleDbCmd As New Data.SqlClient.SqlCommand(command, conness)
myOleDbCmd.CommandType = CommandType.StoredProcedure
....
Это android код :
String SOAP_ACTION = "Http://xxxxx.it/Downloadvalori";
String METHOD_NAME = "Downloadvalori";
String URL = "http://www.yyyyyyyyy.it/WebService.asmx";
//for linear parameter
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo pi = new PropertyInfo();
pi.setName("postazioneId");
pi.setValue(postazione);
request.addProperty(pi);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = false;
envelope.implicitTypes = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(URL);
httpTransport.debug = true;
try {
httpTransport.call(SOAP_ACTION, envelope);
} catch (HttpResponseException e) {
Log.e("HTTPLOG", e.getMessage());
e.printStackTrace();
} catch (IOException e) {
Log.e("IOLOG", e.getMessage());
e.printStackTrace();
} catch (XmlPullParserException e) {
Log.e("XMLLOG", e.getMessage());
e.printStackTrace();
} //send request
Object result = null;
try {
result = (Object) envelope.getResponse();
Log.i("RESPONSE", String.valueOf(result)); // see output in the console
risultato = String.valueOf(result);
} catch (SoapFault e) {
Log.e("requestDump", httpTransport.requestDump.toString());
Log.e("responseDump", httpTransport.responseDump.toString());
Log.e("SOAPLOG", e.getMessage());
e.printStackTrace();
}
.....
Вопрос: как я могу передать пользователя / пароль с кодом android ?? Что мне делать на стороне asp. net ?? Нужно ли мне немного настроить web.config ??
Я новичок ie так что будьте милосердны !!
Спасибо.
EDIT: может быть, это Неправильный способ задать вопрос ???
Я имею в виду ...
Я могу добавить заголовок к java коду, содержащий пользователя и пароль следующим образом:
envelope.headerOut = new Element[1];
envelope.headerOut[0] = buildAuthHeader();
private Element buildAuthHeader() {
Element h = new Element().createElement(NAMESPACE, "AuthHeader");
Element username = new Element().createElement(NAMESPACE, "user");
username.addChild(Node.TEXT, "testuser");
h.addChild(Node.ELEMENT, username);
Element pass = new Element().createElement(NAMESPACE, "pass");
pass.addChild(Node.TEXT, "testpassword");
h.addChild(Node.ELEMENT, pass);
return h;
}
но как мне получить эти значения в службе asp. net ?? Если я перенесу свою службу в аутентифицированную область (с этими учетными данными), она не будет работать ...