Intereting Posts
UI Automator в проекте с minSdkVersion 9 AndroidStudio: не удалось синхронизировать инструменты установки сборки Экспортированная служба не требует разрешения: что это значит? Как центрировать текст подсказки в EditText в Android? IONIC Framework Проблема производительности мобильных приложений Как показать воздушный шар над маркером в MapActivity? Разве нет виджета? Какое знание / экспертиза требуется для переноса андроида на пользовательское устройство ручного управления? Могу ли я написать приложение в javascript / HTML / CSS и продать его в магазине приложений, в Google Play и в магазине мобильных приложений для Microsoft? Как эмулятор android может связаться с машиной-разработчиком хоста в eclipse? Как использовать API входа в Google с помощью Cordova / Phonegap Прозрачный макет в Android? Ограничение onSaveInstanceState? Превосходная программа для Android. Но Android 4.1.2 не запускает приложение Сообщение «Поле может быть преобразовано в локальную переменную» появляется при настройке цвета панели действий Android ListView заголовки

Как использовать WCF-сервис с Android

Я создаю сервер в .NET и клиентское приложение для Android. Я хотел бы реализовать метод аутентификации, который отправляет имя пользователя и пароль на сервер, а сервер отправляет обратно строку сеанса.

Я не знаком с WCF, поэтому я очень благодарен за вашу помощь.

В java я написал следующий метод:

private void Login() { HttpClient httpClient = new DefaultHttpClient(); try { String url = "http://192.168.1.5:8000/Login?username=test&password=test"; HttpGet method = new HttpGet( new URI(url) ); HttpResponse response = httpClient.execute(method); if ( response != null ) { Log.i( "login", "received " + getResponse(response.getEntity()) ); } else { Log.i( "login", "got a null response" ); } } catch (IOException e) { Log.e( "error", e.getMessage() ); } catch (URISyntaxException e) { Log.e( "error", e.getMessage() ); } } private String getResponse( HttpEntity entity ) { String response = ""; try { int length = ( int ) entity.getContentLength(); StringBuffer sb = new StringBuffer( length ); InputStreamReader isr = new InputStreamReader( entity.getContent(), "UTF-8" ); char buff[] = new char[length]; int cnt; while ( ( cnt = isr.read( buff, 0, length - 1 ) ) > 0 ) { sb.append( buff, 0, cnt ); } response = sb.toString(); isr.close(); } catch ( IOException ioe ) { ioe.printStackTrace(); } return response; } 

Но на стороне сервера до сих пор я ничего не понял.

Я был бы очень благодарен, если бы кто-нибудь мог объяснить, как создать соответствующую строку метода Login (имя пользователя строки, строковый пароль) с соответствующими настройками App.config и интерфейсом с соответствующей подписью [OperationContract], чтобы прочитать эти два параметра от клиента и ответить с помощью Строка сеанса.

Благодаря!

Solutions Collecting From Web of "Как использовать WCF-сервис с Android"

Чтобы начать работу с WCF, было бы проще всего использовать формат SOAP по умолчанию и HTTP POST (а не GET) для привязок веб-сервисов. Самый простой HTTP-привязкой для работы – «basicHttpBinding». Ниже приведен пример того, как может выглядеть ServiceContract / OperationContract для вашей службы входа в систему:

 [ServiceContract(Namespace="http://mycompany.com/LoginService")] public interface ILoginService { [OperationContract] string Login(string username, string password); } 

Реализация службы может выглядеть так:

 public class LoginService : ILoginService { public string Login(string username, string password) { // Do something with username, password to get/create sessionId // string sessionId = "12345678"; string sessionId = OperationContext.Current.SessionId; return sessionId; } } 

Вы можете разместить это как службу Windows с помощью службы ServiceHost, или вы можете разместить ее в IIS, как обычное веб-приложение (служба) ASP.NET. Есть много учебников для них обоих.

Конфигурация службы WCF может выглядеть так:

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="LoginServiceBehavior"> <serviceMetadata /> </behavior> </serviceBehaviors> </behaviors> <services> <service name="WcfTest.LoginService" behaviorConfiguration="LoginServiceBehavior" > <host> <baseAddresses> <add baseAddress="http://somesite.com:55555/LoginService/" /> </baseAddresses> </host> <endpoint name="LoginService" address="" binding="basicHttpBinding" contract="WcfTest.ILoginService" /> <endpoint name="LoginServiceMex" address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services> </system.serviceModel> </configuration> 

(Материал MEX является необязательным для производства, но необходим для тестирования с помощью WcfTestClient.exe и для отображения метаданных службы).

Вам нужно будет изменить код Java для отправки сообщения SOAP в службу. WCF может быть немного придирчивым при взаимодействии с клиентами, отличными от WCF, поэтому вам придется немного поработать с заголовками POST, чтобы заставить его работать. После этого вы можете начать исследовать безопасность для входа (возможно, потребуется использовать другую привязку для повышения безопасности) или, возможно, с помощью WCF REST, чтобы разрешить логины с GET, а не SOAP / POST.

Ниже приведен пример того, как должен выглядеть HTTP POST из кода Java. Существует инструмент под названием « Fiddler », который может быть действительно полезен для отладки веб-сервисов.

 POST /LoginService HTTP/1.1 Content-Type: text/xml; charset=utf-8 SOAPAction: "http://mycompany.com/LoginService/ILoginService/Login" Host: somesite.com:55555 Content-Length: 216 Expect: 100-continue Connection: Keep-Alive <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <Login xmlns="http://mycompany.com/LoginService"> <username>Blah</username> <password>Blah2</password> </Login> </s:Body> </s:Envelope> 

Другой вариант может заключаться в том, чтобы избежать совместного использования WCF и просто использовать .NET HttpHandler. HttpHandler может захватить переменные строки запроса из вашего GET и просто написать ответ на Java-код.

Вам понадобится нечто большее, что HTTP-запрос для взаимодействия с WCF-сервисом, если ваша служба WCF не имеет интерфейса REST. Или ищите API-интерфейс веб-сервиса SOAP, который работает на android или делает ваш сервис RESTful. Вам понадобится .NET 3.5 SP1 для работы служб WCF REST:

http://msdn.microsoft.com/en-us/netframework/dd547388.aspx

Из моего недавнего опыта я бы порекомендовал библиотеке ksoap использовать Soap WCF Service, на самом деле это очень просто, этот поток anddev thread migh также поможет вам.

Если бы я делал это, я бы, вероятно, использовал WCF REST на сервере и REST-библиотеку на клиенте Java / Android.