我正在使用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 ...並且身份驗證應該是帶有代表團的憑證類型窗口?我認爲.. 肥皂認證是否有這樣的文件? –