Как Потреблять службы WCF с Android

голоса
77

Я создаю сервер в .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;
}

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

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

Благодаря!

Задан 21/03/2009 в 19:48
источник пользователем
На других языках...                            


5 ответов

голоса
40

Для того, чтобы начать работу с 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;
    }
}

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

Конфигурации 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. Существует инструмент под названием « Скрипач » , что может быть очень полезно для отладки веб-сервисов.

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>
Ответил 24/03/2009 в 03:05
источник пользователем

голоса
7

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

Ответил 24/03/2009 в 03:10
источник пользователем

голоса
6

Вам нужно нечто большее, что запрос HTTP, чтобы взаимодействовать со службой WCF ПОКА ваша служба WCF не имеет интерфейс REST. Либо искать службы API SOAP веб, который работает на Android или сделать свой сервис RESTful. Вам понадобится .NET 3.5 SP1, чтобы сделать службы WCF REST:

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

Ответил 23/03/2009 в 01:01
источник пользователем

голоса
4

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

Ответил 05/08/2011 в 03:41
источник пользователем

голоса
3

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

Ответил 31/03/2009 в 21:47
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more