xamarin PCL肥皂网络服务

时间:2017-07-06 11:39:29

标签: c# web-services soap xamarin.forms portable-class-library

我是Xamarin,C#和SOAP的新手。 我发现了类似的问题,例如this,尤其是this。 我有一个我在Visual Studio 2017 for Mac上创建的Xamarin PCL项目,我需要使用SOAP Web服务 - WSDL。 我有与我提到的第二个链接相同的问题,当我向PCL添加Web引用时,框架显示为灰色并设置为WCF,我无法将其更改为.Net 2.0。 如果我将Web引用添加到Android和IOS项目,那么我可以更改框架。我现在不是针对Windows应用程序,只有IOS和android。 我是通过尝试将Web引用添加到PCL来正确执行此操作,还是应该添加到2个平台项目中?

1 个答案:

答案 0 :(得分:0)

这样做的一种方法是使用依赖注入,如下所述。

在PCL项目中定义一个接口

public interface ISoapServiceHelper
{

    string PerformSyncSoapServiceRequest(string requestXML);
}

在原生iOS&中实现界面Android项目如下图所示。 requestXML是SOAP服务请求

public string PerformSyncSoapServiceRequest(string requestXML)
        {
            var ServiceResult = string.Empty;
            try
            {
                HttpWebRequest request = CreateSOAPWebRequest();
                XmlDocument SOAPReqBody = createSOAPReqBody(requestXML);
                using (Stream stream = request.GetRequestStream())
                {
                    SOAPReqBody.Save(stream);
                }
                using (WebResponse Serviceres = request.GetResponse())
                {
                    using (StreamReader rd = new StreamReader(Serviceres.GetResponseStream()))
                    {
                        ServiceResult = rd.ReadToEnd();
                    }
                }

            }
            catch (Exception e)
            {
                throw;
            }
            return ServiceResult;
        }


public HttpWebRequest CreateSOAPWebRequest()
        {
            HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(@"your_URL");
            Req.Headers.Add(@"SOAP:Action");
            Req.ContentType = "text/xml;charset=\"utf-8\"";
            Req.Accept = "text/xml";
            Req.Method = "POST";
            Req.Timeout = 20000;
            Req.ReadWriteTimeout = 20000;
            return Req;
        }

        XmlDocument createSOAPReqBody(string requestXML)
        {
            XmlDocument SOAPReqBody = new XmlDocument();
            SOAPReqBody.LoadXml(requestXML);
            return SOAPReqBody;
        }

我使用Unity IOC进行依赖注入,它工作正常。