【问题标题】:Web Service call from Windows Phone来自 Windows Phone 的 Web 服务调用
【发布时间】:2014-07-05 10:40:07
【问题描述】:

大家好,

我想问你一个简单的问题。从 windows phone 调用soap web 服务的方法有哪些?

我尝试使用服务引用(我将服务引用添加到 ?wsdl URL,它会生成我在 Web 服务上拥有的所有方法),但是在发送请求时遇到了错误(解组错误、意外元素) .请注意,我已经在 J​​ava 中创建了一个肥皂网络服务,并且所有方法都在 iOS 应用程序和 Android 应用程序中运行并返回数据,但是我在 windows phone 中遇到了这个问题。

我想检查一些有关在 windows phone 中调用和使用基于肥皂的 web 服务的可能性的信息,如果可能的话,还有示例。

谢谢。

“添加服务引用”方法总是返回以下错误:

Unmarshalling Error: unexpected element (uri:"http://webservicelocation.com/",local:"param1"). Expected elements are <{}param1>,<{}param2>,<{}param3>

【问题讨论】:

  • 我在尝试从 Windows Phone 调用 Java SOAP Web 服务时遇到问题。我没有遇到过这样的例子吗?

标签: c# web-services windows-phone-7 windows-phone-8 soap


【解决方案1】:

您可以使用 HttpWebRequest 来调用一个肥皂网络服务。

下面的代码用于做一个货币转换器,它调用一个基于肥皂的网络服务。

主页内

ServiceConnection cs = new ServiceConnection();

内部构造函数

string pXml = @"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:web=""http://www.webserviceX.NET/"">" +
                                    "<soapenv:Header/><soapenv:Body><web:ConversionRate>" +
                                    "<web:FromCurrency>" + "USD" + "</web:FromCurrency>" +
                                    "<web:ToCurrency>" + "INR"+ "</web:ToCurrency>" +
                                    "</web:ConversionRate></soapenv:Body></soapenv:Envelope>";
                        ServiceConnection cs = new ServiceConnection();

                        cs.OnEndResponse += new ServiceConnection.OnServerEndResponse(serviceConnection_OnEndResponse);
                        cs.ServiceCall(pXml);

服务调用后你会在函数内部得到响应

void serviceConnection_OnEndResponse(string response, int statusCode)
        {
         MessageBox.Show(response);
         }

这里是服务连接类

class ServiceConnection
    {
        public string url = "";
        private string postXml;
        public delegate void OnServerEndResponse(string response, int statusCode);
        public event OnServerEndResponse OnEndResponse;

        public ServiceConnection()
        {
            url = "http://www.webservicex.net/CurrencyConvertor.asmx";
        }

        public void ServiceCall(string pxml)
        {
            postXml = pxml;
            WebRequest request = WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "text/xml;charset=UTF-8";
            request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
        }

        void GetRequestStreamCallback(IAsyncResult asynchronousResult)
        {
            HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
            Stream postStream = webRequest.EndGetRequestStream(asynchronousResult);
            string postData = postXml;
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            postStream.Write(byteArray, 0, byteArray.Length);
            postStream.Close();
            webRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), webRequest);
        }

        void GetResponseCallback(IAsyncResult asynchronousResult)
        {
            try
            {
                HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
                HttpWebResponse response;
                response = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult);
                Stream streamResponse = response.GetResponseStream();
                StreamReader streamReader = new StreamReader(streamResponse);
                string Response = streamReader.ReadToEnd();
                streamResponse.Close();
                streamReader.Close();
                response.Close();
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    OnEndResponse(Response, Convert.ToInt32(response.StatusCode));
                });

            }
            catch
            {
                OnEndResponse("", 500);
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多