Jak ke spotřebě služby WCF s operačním systémem Android

hlasů
77

Jsem vytvořit server v .NET a klientskou aplikaci pro Android. Chtěl bych zavést metodu ověřování, který odešle uživatelské jméno a heslo na server a server odešle zpět řetězec relace.

Nejsem obeznámen s WCF tak bych opravdu ocení vaši pomoc.

V Javě jsem napsal následující metodu:

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

Ale na straně serveru, takže zatím jsem nezjistil nic.

Byl bych opravdu vděčný, kdyby někdo mohl vysvětlit, jak vytvořit odpovídající způsob řetězec Login (řetězec uživatelského jména, hesla řetězce) s vhodnými nastaveními App.config a ve styku s příslušnými [OperationContract] podpis, aby se číst tyto dva parametry z klienta a odpovědi se sezení řetězec.

Dík!

Položena 21/03/2009 v 19:48
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
40

Chcete-li začít s WCF, mohlo by to být jednodušší prostě použít výchozí formát SOAP a HTTP POST (spíše než GET) pro vázání webových služeb. Nejsnadnější HTTP vázání získat práci je „basicHttpBinding“. Zde je příklad toho, co ServiceContract / OperationContract by mohla vypadat za své přihlašovací služby:

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

Zavedení této služby může vypadat například takto:

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

Můžete hostit to jako služba Windows pomocí ServiceHost, nebo ho mohou hostit v IIS jako normální ASP.NET web (služba) aplikace. Existuje mnoho výukových programů tam pro oba z nich.

Služby WCF konfigurace může vypadat například takto:

<?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 věci je volitelná pro výrobu, ale je potřeba pro testování s WcfTestClient.exe a pro vystavení servisní metadata).

Budete muset upravit svůj kód v jazyce Java psát zprávu SOAP ke službě. WCF může být trochu vybíravý při inter-pracující s klienty non-WCF, takže budete muset nepořádku s POST záhlaví trochu se dostat do práce. Jakmile se dostanete tento běží, pak můžete začít zkoumat bezpečnost pro přihlášení (může být nutné použít jiný závazný dostat lepší zabezpečení), případně pomocí WCF REST, aby bylo možné přihlášení s GET spíše než mýdlo / POST.

Zde je příklad toho, co HTTP POST by měl vypadat z kódu v jazyce Java. K dispozici je nástroj s názvem „ Fiddler “, které mohou být velmi užitečné pro ladění webové služby.

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>
Odpovězeno 24/03/2009 v 03:05
zdroj uživatelem

hlasů
7

Další možností by mohlo být, aby se zabránilo WCF všechny setkání a stačí použít NET HttpHandler. HttpHandler může chytit query-string proměnné z GET a prostě odepsat odpověď na kódu v jazyce Java.

Odpovězeno 24/03/2009 v 03:10
zdroj uživatelem

hlasů
6

Budete potřebovat něco víc, že ​​požadavek na http komunikovat s služby WCF pokud vaše služby WCF má REST rozhraní. Buď hledat služby API SOAP webové, který běží na android, nebo aby vaše služba RESTful. Budete potřebovat .NET 3.5 SP1 dělat služby WCF REST:

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

Odpovězeno 23/03/2009 v 01:01
zdroj uživatelem

hlasů
4

Z mé nedávné zkušenosti bych doporučil ksoap knihovnu ke spotřebě mýdlo WCF službu, její vlastně velmi jednoduché, to anddev závit migh pomoct taky.

Odpovězeno 05/08/2011 v 03:41
zdroj uživatelem

hlasů
3

Kdybych dělal to bych asi použít WCF REST na serveru a knihovnu REST na Java / klienta pro Android.

Odpovězeno 31/03/2009 v 21:47
zdroj uživatelem

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