2017-07-13 54 views
0

イントラネットの通知を管理するためにXamarin.Formsを使用してアプリケーションを作成するために開発中です。
私は最初にユーザーのログインとパスワードを確認するWebサービスに接続するメインページに "Connection"というボタンがあります。
私の問題は、Webサービスへの接続が常に失敗したことです。1つ以上のエラーが発生しました(リクエストの送信中にエラーが発生しました) - Xamarin.Forms

私は郵便配達員とウェブサービスをテストしました。応答がありますが、Visual Studio(UWPまたはDroidプロジェクト)のアプリで試してみると、毎回例外が発生し、理由はわかりません。私は、私は、Visual Studioのデバッグ画面上でこの結果を得る「接続」ボタンをクリック

private string WebServiceAuthentication() 
{ 
    string url = "https://chlevinatier.agiir-portail.com/api/jsonws/AlertesPortail-portlet.portal/check-authentication"; 
    string login = "test"; 
    string password = "test";` 

    using (HttpClient client = new HttpClient()) 
    { 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "tjhGjfM1"); 

     try 
     { 
      return client.GetAsync($"{url}?login={login}&password={password}").Result.Content.ReadAsStringAsync().Result; 
     } 
     catch (AggregateException ae) 
     { 
      ae.Handle((x) => 
      { 
       if (x is HttpRequestException) 
       { 
        HttpRequestException hre = x as HttpRequestException; 
        Debug.WriteLine($"Data : {hre.Data}\nHelpLink : {hre.HelpLink}\nHResult : {hre.HResult}\nInnerException : {hre.InnerException}\nMessage : {hre.Message}\nSource : {hre.Source}\nStackTrace : {hre.StackTrace}"); 
       } 

       return false; 
      }); 

      return string.Empty; 
     } 
     catch (Eception e) 
     { 
      Debug.WriteLine($"Data : {e.Data}\nHelpLink : {e.HelpLink}\nHResult : {e.HResult}\nInnerException : {e.InnerException}\nMessage : {e.Message}\nSource : {e.Source}\nStackTrace : {e.StackTrace}"); 
      return string.Empty; 
     } 
    } 
} 

は:

******************************************************************************* 
>Data : System.Collections.ListDictionaryInternal 
>HelpLink : 
>HResult : -2147012851 
>InnerException : System.Runtime.InteropServices.COMException (0x80072F0D): Le texte associé à ce code d’erreur est introuvable. 

>L'autorité de certification n'est pas valide ou correcte 

> at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
> at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
> at System.Net.Http.HttpHandlerToFilter.<SendAsync>d__4.MoveNext() 

--- End of stack trace from previous location where exception was thrown --- 

> at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
> at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
> at System.Net.Http.HttpClientHandler.<SendAsync>d__86.MoveNext() 

>Message : An error occurred while sending the request. 
>Source : System.Net.Http 
>StackTrace : 
>at System.Net.Http.HttpClientHandler. <SendAsync>d__86.MoveNext() 

--- End of stack trace from previous location where exception was thrown --- 

> at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
> at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
> at System.Net.Http.HttpClient.<FinishSendAsync>d__58.MoveNext() 
******************************************************************************* 
+0

あなたはインターネットへのアクセス権があることを確認してください(おそらくHTTP Getと無資格のwww.google.comのような別のアドレスにアクセスしようとします) – hugoterelle

+0

エラーメッセージを見てください(フランス語からの粗い翻訳:認証局が無効か不正です)あなたはHTTPS/SSLエンドポイントに接続しようとしているようです。自己署名証明書を使用する場合、証明書を検証する必要がないことをプログラムに伝えるオプションがあります。 – NaeiKinDus

+0

注意すべき点は、ログインを実行するために 'GET'を使うべきではありません。 – forivall

答えて

0

問題があることである

この

は私のコードですドメイン https://chlevinatier.agiir-portail.com/は、有効なSSL/TLS証明書を使用しないため、信頼できない証明書を持つサーバーとの接続は安全ではないため(ほとんどの場合)、要求は機能しません。

ソリューション:

  1. 、証明書をダウンロードしてアプリにこれを追加し、this answer次の例のためにそれをインポートします。私はHttpClientと解決策を探していたが、私はそれを見つけられなかった。 これは正しい方法ですです。
  2. は、私は、これはあなたを助けることを願ってthis answer

以下、証明書の検証を避けてください。

関連する問題