Rajesh
Rajesh

Reputation: 784

web service call in windows phone 8

I have a webservice written in java. I called from iPhone application but do not know how to call form windows phone. Web service have three parameter username, password and application id. I want to call through HttpWebRequest and receive response. How I can I do this ?

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>
-<SOAP-ENV:Body>
-<doLogin xmlns="http://login.mss.uks.com">
-<loginid xsi:type="xsd:string">abc</loginid>
-<password xsi:type="xsd:string">pqrs</password>
-<app_id xsi:type="xsd:int">2</app_id>
</doLogin>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Thanks in advance.

Upvotes: 0

Views: 5109

Answers (4)

rendon
rendon

Reputation: 2363

I've been struggling with this topic these days too. Here is my situation and how I solved this problem:

Problem

I've created a Web service using PHP with NuSOAP, and now I have to create a Windows Phone 8 App that consumes the Web service to do some stuff.

Solution

I going explain my solution using en example.

Here is the Web service:

<?php
require_once 'lib/nusoap.php';

function test()
{ 
    return "Hello World!";
}


$server = new soap_server();
$server->configureWSDL("MyService", "urn:MyService");

// IMPORTANT: Avoid some ProtocolException
$server->soap_defencoding = 'utf-8'; 

$server->register('test',
    array(),
    array('greeting' => 'xsd:string'),
    'Service',
    false,
    'rpc',
    'literal',  // IMPORTANT: 'encoded' isn't compatible with Silverlight
    'A simple hello world'
);

    
if (isset($HTTP_RAW_POST_DATA)) {
    $server->service($HTTP_RAW_POST_DATA);
} else {
    $server->service("php://input");
}
?>

Now the client App in Windows Phone:

  1. Create a new project.
  2. Create a TextBox with name 'testText' and a Button with name 'testButton'.
  3. Add a service reference

Solution Explorer -> MyProjectName -> Add Service Reference.

NOTE: If the Web service is mounted in your local computer, don't use 'localhost' as the name of the server, use your IP. In WP 8, 'localhost' refers to the device itself, not your computer. More info.

Add service reference window With this, Visual Studio will create automatically all the needed classes to use the Web service.

Add some action to the button:

    private void testButton_Click(object sender, RoutedEventArgs e)
    {
        var client = new ServiceReference.MyServicePortTypeClient();
        client.testCompleted += client_testCompleted;
        client.testAsync();
    }

    private void client_testCompleted(object sender, ServiceReference.testCompletedEventArgs e)
    {
        testText.Text = e.Result;
    }

Here is the result:

enter image description here

I hope this be useful.

Upvotes: 2

Rajesh
Rajesh

Reputation: 784

Finally I got my perfect answer. By using the below code I solve my problem using HttpWebRequest.

                    string url = "http://urlname";


                    HttpWebRequest request = WebRequest.CreateHttp(new Uri(url)) as HttpWebRequest;
                    request.AllowReadStreamBuffering = true;
                    string strsoaprequestbody = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                        "<soap-env:envelope xmlns:soap-env=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:soap-enc=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/xmlschema-instance\" xmlns:xsd=\"http://www.w3.org/2001/xmlschema\" soap-env:encodingstyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n" +
                        "<soap-env:body>\n" +
                        "<dologin xmlns=\"http://login.mss.uks.com\">\n" +
                        "<username xsi:type=\"xsd:string\">userID</username>\n" +
                        "<password xsi:type=\"xsd:string\">password</password>\n" +
                        "<app_id xsi:type=\"xsd:int\">2</app_id>\n" +
                        "</dologin>" +
                        "</soap-env:body>\n" +
                        "</soap-env:envelope>\n";


                    request.ContentType = "application/x-www-form-urlencoded";
                    request.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch)";
                    request.Headers["SOAPAction"] = "http://schemas.xmlsoap.org/soap/encoding/";
                    // Set the Method property to 'POST' to post data to the URI.
                    request.Method = "POST";
                    request.ContentLength = strsoaprequestbody.Length;
                    // start the asynchronous operation
                    request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
                }

private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
        {
            Debug.WriteLine("GetRequestStreamCallback method called....");
            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

            // End the operation
            Stream postStream = request.EndGetRequestStream(asynchronousResult);

            string postData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                                "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n" +
                                "<SOAP-ENV:Body>\n" +
                                "<doLogin xmlns=\"http://login.mss.uks.com\">\n" +
                                "<username xsi:type=\"xsd:string\">userID</username>\n" +
                                "<password xsi:type=\"xsd:string\">password</password>\n" +
                                "<app_id xsi:type=\"xsd:int\">2</app_id>\n" +
                                "</doLogin>" +
                                "</SOAP-ENV:Body>\n" +
                                "</SOAP-ENV:Envelope>\n";

            // Convert the string into a byte array. 
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);

            // Write to the request stream.
            postStream.Write(byteArray, 0, postData.Length);
            postStream.Close();

            // Start the asynchronous operation to get the response
            request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
        }

        private static void GetResponseCallback(IAsyncResult asynchronousResult)
        {
            Debug.WriteLine("GetResponseCallback method called....");

            try
            {
                HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

                // End the operation
                HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
                Stream streamResponse = response.GetResponseStream();
                StreamReader streamRead = new StreamReader(streamResponse);
                string responseString = streamRead.ReadToEnd();
        //display the web response
                Debug.WriteLine("Response String : " + responseString);
                // Close the stream object
                streamResponse.Close();
                streamRead.Close();

                // Release the HttpWebResponse
                response.Close();
            }
            catch (WebException ex)
            {
                using (StreamReader reader = new StreamReader(ex.Response.GetResponseStream()))
                {
                    Debug.WriteLine("Exception output : " + ex);
                }
            }
        }

Upvotes: 1

likewer
likewer

Reputation: 216

Hope this will help you.

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    // Create a new HttpWebRequest object.
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.xxx.com/webservicelogin/webservice.asmx/ReadTotalOutstandingInvoice");

    request.ContentType = "application/x-www-form-urlencoded";
    request.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch)";
    request.CookieContainer = cookie;

    // Set the Method property to 'POST' to post data to the URI.
    request.Method = "POST";

    // start the asynchronous operation
    request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);

}

private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

    // End the operation
    Stream postStream = request.EndGetRequestStream(asynchronousResult);

    //postData value
    string postData = "xxxxxxxxxx";  

    // Convert the string into a byte array. 
    byte[] byteArray = Encoding.UTF8.GetBytes(postData);

    // Write to the request stream.
    postStream.Write(byteArray, 0, postData.Length);
    postStream.Close();

    // Start the asynchronous operation to get the response
    request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);

}

private void GetResponseCallback(IAsyncResult asynchronousResult)
{

            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
            // End the operation

            HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);

            Stream streamResponse = response.GetResponseStream();

            StreamReader streamRead = new StreamReader(streamResponse);
            string read = streamRead.ReadToEnd();

            //respond from httpRequest
            TextBox.Text = read;

            // Close the stream object
            streamResponse.Close();
            streamRead.Close();
            response.Close();
}

Upvotes: 1

Haspemulator
Haspemulator

Reputation: 11308

If you have a proper web service sitting somewhere, you can use Visual Studio to generate wrapper code to access the web service. Check out this link to find how.

Upvotes: 2

Related Questions