簡體   English   中英

Windows Phone 8中的Web服務呼叫

[英]web service call in windows phone 8

我有一個用Java編寫的Web服務。 我從iPhone應用程序調用過,但不知道如何從Windows Phone調用。 Web服務具有三個參數用戶名,密碼和應用程​​序ID。 我想通過HttpWebRequest進行調用並接收響應。 我該怎么做?

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

提前致謝。

如果某處有適當的Web服務,則可以使用Visual Studio生成包裝器代碼以訪問該Web服務。 查看此鏈接以查找方法。

這些天我也一直在努力與此主題。 這是我的情況以及解決此問題的方法:

問題

我已經使用PHP和NuSOAP創建了一個Web服務,現在我必須創建一個Windows Phone 8應用程序,該應用程序使用Web服務來做一些事情。

我將使用示例來說明我的解決方案。

這是Web服務:

<?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");
}
?>

現在,Windows Phone中的客戶端應用程序:

  1. 創建一個新項目。
  2. 創建一個名為“ testText”的文本框和一個名為“ testButton”的按鈕。
  3. 添加服務參考

解決方案資源管理器-> MyProjectName->添加服務參考。

注意 :如果Web服務安裝在您的本地計算機上,請不要使用“ localhost”作為服務器的名稱,而要使用IP。 在WP 8中,“本地主機”是指設備本身,而不是您的計算機。 更多信息

添加服務參考窗口 這樣,Visual Studio將自動創建使用Web服務所需的所有類。

向按鈕添加一些操作:

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

結果如下:

在此處輸入圖片說明

我希望這會有所幫助。

希望這會幫助你。

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

終於我得到了完美的答案。 通過使用以下代碼,我可以使用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);
                }
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM