【问题标题】:xamarin PCL Soap web servicexamarin PCL 肥皂网络服务
【发布时间】:2017-12-10 09:33:17
【问题描述】:

我是 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 个平台项目中?

【问题讨论】:

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


    【解决方案1】:

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

    在 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 进行依赖注入,它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-29
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多