0

私はVisual Studio 2015 v4.2.2.11(Xamarin.forms Portableプロジェクト)にC#Xamarinを使用しています。 私は認証が必要なWebサービスに対処しようとしますが、401 Unauthorizedを取得し続けます。Xamarin Android SOAPのWebサービスで認証情報が返される

webserviceはWebサービスとして公開されているNavisionコードユニットです。要求XMLを受け入れ、応答XMLを返します。 私は多くのプロジェクトでこの方法を使いましたが、認証に問題はありませんでした。 以前のプロジェクトは.Net Windows、UWP、Windows Mobile、Windows CE(コンパクトなフレームワーク)、そして最近私は同じコミュニケーションを使ったWinDevで書かれたいくつかのプロジェクトでした。

webserviceは、ネットワークカレンダー(user、pwd、domain)の形式で認証する必要があります。 UWPプロジェクトでは、サービス参照を追加してこの方法で認証することができます。それは魅力のように機能します! DroidとiOSプロジェクトでは、サービス参照を追加できません。そのため、Web参照を使用する必要がありました。 Web参照オブジェクトには資格証明がありますが、実装されていないようですか?

Androidエミュレータからは、デフォルトのサーバーページを参照できますが、Webサービスを参照しようとすると、ブラウザは401認証も返されます。ログインまたは認証には問題ありません。 Windows 10の電話エミュレータで、Webサービスページを参照するとブラウザが自分の資格情報を要求します。

UWPプロジェクトはService refを使用し、Web refを使用できず、AndroidとiOSプロジェクトの両方がWeb Referenceを使用し、サービス参照を使用できないため、Webサービス接続をプラットフォームプロジェクトにプルする必要がありました。

私はWebサービスをDynamNAVとして宣言するクラスSoapServiceを持ち、サービス自体はserviceHandlerと呼ばれ、実行するアクションはProcessRequestsと呼ばれます。 SoapServiceで

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; 
     } 
    ... 

、私は公共の機能GetDataAsyncを持って、私は は1を試してみてください...すべての戻り401、Webサービスを呼び出し、複数の方法でこれを試してみました:

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

は、ここでの方法を試してみましたか? –

+0

私は試しましたが、Navision WebサービスはSOAPです...認証は委任のある資格情報タイプのウィンドウでなければなりませんか?私は思う.. 石鹸認証のためのそのような文書はありますか? –

答えて

0

問題解決。 私は基本認証を受け入れるためにNavision Webサービスを調整しました... 資格情報が送信されるので、通信が機能します。

お手数をおかけしていただきありがとうございます。 [RESTfulなWebサービスの認証](https://developer.xamarin.com/guides/xamarin-forms/web-services/authentication/rest/):

ヴィム

関連する問題