2017-07-06 115 views
0

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

回答

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