[Android Software Development] Carsten4207:
Use REST instead of web services. Its faster than using Web Services. .NET 3.5 SP1 + 4.0 both support rest. Here is a quick VB Console application that creates a RESTful web service:

(btw - its just a test, nothing pretty)

Imports System

Imports System.ServiceModel

Imports System.ServiceModel.Description

Module Program

Private _WS As servicehost

Sub Main()

Dim _uri As New Uri("http://" + Environment.MachineName + ":81/Pool")

_WS = New ServiceHost(GetType(WCF), _uri)

Dim ep As ServiceEndpoint = _WS.AddServiceEndpoint(GetType(WCF), New WebHttpBinding, String.Empty)

ep.Behaviors.Add(New WebHttpBehavior)

_WS.Open()

Console.WriteLine("Ready")

Console.Read()

End Sub

Imports System.ServiceModel

Imports System.ServiceModel.Channels

Imports System.ServiceModel.Web

<ServiceContract()> _

Public Class WCF

<OperationContract()> _

<WebGet(RequestFormat:=WebMessageFormat.Json, UriTemplate:="add&a={A1}&b={B1}")> _

Public Function Add(ByVal A1 As String, ByVal B1 As String) As Integer

Return A1 + B1

End Function

End Class

Then you can access the web service using IE or Chrome:

http://localhost:81/pool/add&a=5&b=10

You can them implement this in Android using something like this:

package com.carstendressler.pool;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.DefaultHttpClient;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import android.util.Log;

public class RestClient {

private static String convertStreamToString(InputStream is) {

/*

* To convert the InputStream to String we use the BufferedReader.readLine()

* method. We iterate until the BufferedReader return null which means

* there's no more data to read. Each line will appended to a StringBuilder

* and returned as String.

*/

BufferedReader reader = new BufferedReader(new InputStreamReader(is));

StringBuilder sb = new StringBuilder();

String line = null;

try {

while ((line = reader.readLine()) != null) {

sb.append(line + "\n");

}

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return sb.toString();

}

/* This is a test function which will connects to a given

* rest service and prints it's response to Android Log with

* labels "Praeda".

*/

public static void connect(String url)

{

HttpClient httpclient = new DefaultHttpClient();

// Prepare a request object

HttpGet httpget = new HttpGet(url);

// Execute the request

HttpResponse response;

try {

response = httpclient.execute(httpget);

// Examine the response status

Log.i("Praeda",response.getStatusLine().toString());

// Get hold of the response entity

HttpEntity entity = response.getEntity();

// If the response does not enclose an entity, there is no need

// to worry about connection release

if (entity != null) {

// A Simple JSON Response Read

InputStream instream = entity.getContent();

String result= convertStreamToString(instream);

Log.i("Praeda",result);

// A Simple JSONObject Creation

JSONObject json=new JSONObject(result);

Log.i("Praeda","<jsonobject>\n"+json.toString()+"\n</jsonobject>");

// A Simple JSONObject Parsing

JSONArray nameArray=json.names();

JSONArray valArray=json.toJSONArray(nameArray);

for(int i=0;i<valArray.length();i++)

{

Log.i("Praeda","<jsonname"+i+">\n"+nameArray.getString(i)+"\n</jsonname"+i+">\n"

+"<jsonvalue"+i+">\n"+valArray.getString(i)+"\n</jsonvalue"+i+">");

}

// A Simple JSONObject Value Pushing

json.put("sample key", "sample value");

Log.i("Praeda","<jsonobject>\n"+json.toString()+"\n</jsonobject>");

// Closing the input stream will trigger connection release

instream.close();

}

} catch (ClientProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

BTW - this isnt my code. I took it from various web sites...