0

Ich verwende C# Xamarin für Visual Studio 2015 v4.2.2.11 (Xamarin.forms Portable-Projekt). Ich versuche, einen Webservice zu adressieren, der eine Authentifizierung erfordert, aber 401 wird nicht autorisiert.Xamarin Android SOAP Webservice mit Anmeldeinformationen gibt 401 nicht autorisierte

Der Webservice ist eine Navision Codeunit, die als Webservice veröffentlicht wird. Er akzeptiert eine XML-Anfrage und gibt eine Antwort-XML zurück. Ich habe diesen Weg für viele Projekte verwendet und hatte nie ein Problem mit der Authentifizierung. Frühere Projekte waren. Net Windows, UWP, Windows Mobile, Windows CE (kompaktes Framework) und vor kurzem ein paar Projekte in WinDev geschrieben, wo ich die gleiche Kommunikation verwendet.

Der Webservice benötigt eine Authentifizierung in Form eines networkcredential (user, pwd, domain). Im UWP-Projekt kann ich eine Service-Referenz hinzufügen und auf diese Weise authentifizieren. Das funktioniert wie ein Zauber! Im Droid- und iOS-Projekt kann ich keine Service-Referenz hinzufügen, daher musste ich eine Web-Referenz verwenden. Das Web Reference-Objekt hat eine Eigenschaft Credentials, aber scheint nicht implementiert zu sein?

Vom Android-Emulator kann ich zur Standard-Server-Seite navigieren, aber wenn ich versuche, zum Webservice zu navigieren, gibt der Browser auch 401 nauthorized zurück, keine Frage zum Anmelden oder zur Authentifizierung. Auf dem Windows 10-Telefonemulator kann ich zur Webservice-Seite navigieren und der Browser fragt nach meinen Zugangsdaten.

Da das UWP-Projekt Service ref verwendet und Webref nicht verwenden kann und das Android- und iOS-Projekt Web Reference verwendet und keine Serviceverweise verwenden kann, musste ich die Webservice-Verbindung zu den Plattformprojekten herstellen.

Ich habe eine Klasse SoapService, wo ich den Webservice als DynamicsNAV deklarieren und der Service selbst heißt ServiceHandler und die auszuführende Aktion heißt 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; 
     } 
    ... 

Im SoapService, ich habe die öffentliche Funktion GetDataAsync ich den Webservice aufrufen und haben dies auf vielfältige Weise versucht, alle 401 zurückzukehren ... Versuchen 1:

serviceHandler.ProcessRequests(request, ref response); 

Exception geworfen: Statuscode = System.Net.HttpStatusCode.Unauthorized

Versuchen 2:

serviceHandler.ProcessRequestsAsync(request, response); 
serviceHandler.ProcessRequestsCompleted += ServiceHandler_ProcessRequestsCompleted; 

Exception geworfen: Statuscode = System.Net.HttpStatusCode.Unauthorized

Versuchen 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) 
{ } 

Exception geworfen: Statuscode = System.Net.HttpStatusCode.Unauthorized

... Ich habe versucht, die Service.cs anzupassen, aber nichts half?!?

Kann mir bitte jemand helfen? Ich muss das lösen oder eine Abhilfe schaffen ...

Vielen Dank im Voraus, Wim

+0

Haben Sie die Methode versucht hier: [eine RESTful Web Service Authentifizieren] (https://developer.xamarin.com/guides/xamarin-forms/web-services/authentication/rest/)? –

+0

Ich habe versucht, aber die Navision Webservices sind SOAP ... und die Authentifizierung sollte Anmeldeinformationen Typ Windows mit Delegierung sein? Ich denke .. Gibt es ein solches Dokument für die Soap-Authentifizierung? –

Antwort

0

Problem gelöst. Ich habe den Navision Web Service optimiert, um die Standardauthentifizierung zu akzeptieren ... Die Anmeldeinformationen werden gesendet, damit die Kommunikation funktioniert.

Danke für alle, die geholfen haben.

Wim

Verwandte Themen