我正在使用C#Xamarin for Visual Studio 2015 v4.2.2.11(Xamarin.forms Portable project)。 我试图解决一个需要身份验证的Web服务,但不断收到401未授权。Xamarin带有凭证的Android SOAP webservice返回401未授权
该webservice是Navision codeunit发布为web服务。它接受请求XML并返回响应XML。 我对许多项目都使用过这种方式,从来没有认证问题。以前的项目有.Net Windows,UWP,Windows mobile,Windows CE(紧凑框架)以及最近用WinDev编写的一些项目,我使用了相同的通信。
webservice需要以networkcredential(user,pwd,domain)形式进行身份验证。 在UWP项目中,我可以添加服务引用并以此方式进行身份验证。这就像一个魅力! 在Droid和iOS项目中,我无法添加服务参考,因此我不得不使用Web参考。 Web引用对象确实有一个属性Credentials,但似乎没有实现?
从Android模拟器中,我可以浏览到默认的服务器页面,但是当我尝试浏览到web服务时,浏览器还返回401未授权,无需登录或认证的问题。 在Windows 10手机模拟器上,我可以浏览到web服务页面,浏览器询问我的凭据。
由于UWP项目使用服务引用并且不能使用Web引用,并且Android和iOS项目都使用Web引用并且不能使用服务引用,所以我必须将Web服务连接拉到平台项目。
我有一个SoapService类,我声明webservice为DynamicsNAV,服务本身称为serviceHandler,要执行的操作称为ProcessRequests。
public class SoapService : ISoapService
{
DynamicsNAV.WebServiceHandler_PortClient serviceHandler;
string soapURL = "http://192.168.7.101:7047/DynamicsNAV90/WS/CRONUS%20BELGI%C3%8B%20NV/Codeunit/WebServiceHandler";
public SoapService()
{
serviceHandler = new DynamicsNAV.WebServiceHandler();
serviceHandler.Url = soapURL;
NetworkCredential nc = new NetworkCredential("wd", "wd", "VMNAV2016");
serviceHandler.Credentials = nc;
serviceHandler.PreAuthenticate = true;
}
...
在SoapService,我有公共职能GetDataAsync,我所说的互联网服务和多种方式都试过,都返回401 ... 尝试1:
serviceHandler.ProcessRequests(request, ref response);
异常抛出:的StatusCode = System.Net.HttpStatusCode.Unauthorized
尝试2:
serviceHandler.ProcessRequestsAsync(request, response);
serviceHandler.ProcessRequestsCompleted += ServiceHandler_ProcessRequestsCompleted;
抛出异常:的StatusCode = System.Net.HttpStatusCode.Unauthorized
尝试3:
HttpWebRequest req = HttpWebRequest.CreateHttp(soapURL);
req.Method = "POST";
req.PreAuthenticate = true;
req.Credentials = new NetworkCredential("wd", "wd", "VMNAV2016");
byte[] postBytes = Encoding.ASCII.GetBytes(request);
req.ContentLength = postBytes.Length;
Stream postStream = req.GetRequestStream();
postStream.Write(postBytes, 0, request.Length);
postStream.Close();
WebResponse resp = req.GetResponse();
if (resp.ContentLength > 0)
{ }
抛出异常:的StatusCode = System.Net.HttpStatusCode.Unauthorized
... 我尝试过调整Service.cs,但没有任何帮助?!?
任何人都可以帮助我吗?我必须得到这个解决方案或解决方法...
由于提前, 维姆
有你在这里尝试过的方法:[认证RESTful Web服务(https://developer.xamarin.com/guides/xamarin-forms/web-services/authentication/rest/)? –
我试过了,但Navision的webservices是SOAP ...并且身份验证应该是带有代表团的凭证类型窗口?我认为.. 肥皂认证是否有这样的文件? –