2017-07-06 174 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進行依賴項注入,並且它工作正常。