0

我正在使用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,但沒有任何幫助?!?

任何人都可以幫助我嗎?我必須得到這個解決方案或解決方法...

由於提前, 維姆

+0

有你在這裏嘗試過的方法:[認證RESTful Web服務(https://developer.xamarin.com/guides/xamarin-forms/web-services/authentication/rest/)? –

+0

我試過了,但Navision的webservices是SOAP ...並且身份驗證應該是帶有代表團的憑證類型窗口?我認爲.. 肥皂認證是否有這樣的文件? –

回答

0

問題解決了。 我調整了Navision Web服務以接受基本身份驗證... 憑據確實發送,因此通信正常工作。

感謝所有幫助過我的人。

維姆