【问题标题】: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 进行依赖注入,它工作正常。