私の Windows Phone アプリケーションは、Apache Tomcat を使用しているリモート サービスからのデータを使用します。これまで、サービスへのすべての呼び出しはhttp://プロトコルを使用して行われていましたが、最近、サービス開発者がセキュリティ レイヤーを追加したため、https://プロトコルを使用して要求を行う必要があります。
Windows Phone のデフォルトの動作は、すべての自己署名証明書を回避することであり、最適な状況は認証局によって署名された証明書を持つことであることは知っていますが、私はそうしませんでした。Web で検索すると、WP デバイスに自己署名証明書をインストールできることがわかりました。次の 2 つのオプションがあります。
- メールを送信し、.cerファイルを添付します。開こうとすると、WP がインストール プロセスを開始します。
- .cerファイルを、 http://プロトコルでアクセスできるサーバーのパブリック スペースに配置します。アプリケーションの最初の起動時に、デバイス ブラウザでその URL を開こうとすると、WP がインストール プロセスを開始します。
b オプションはユーザーにとって煩わしくないので、私はそのようにしています。
PC で Internet Explorer を使用して* .cer ファイルを作成します。このステップがうまくできているかどうかはわかりません。Mozilla Firefox を使用してエクスポートできることはわかっていますが、リストに.cerファイル形式がありません。
サービスへのリクエストは、「リモート サーバーがエラーを返しました: NotFound.」というエラーを返しています。</p>
これは、セキュリティが実装されていないときに私が使用したアプローチです。
public void Start()
{
String requestString = url + method + parameters;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestString);
request.BeginGetResponse(FinishHttpWebRequest, request);
}
public void FinishHttpWebRequest(IAsyncResult result)
{
HttpWebRequest request = result.AsyncState as HttpWebRequest;
if (request != null)
{
try
{
WebResponse response = request.EndGetResponse(result);
Stream streamResponse = response.GetResponseStream();
string responseString = new StreamReader(streamResponse).ReadToEnd();
}
catch (WebException e)
{
…
}
}
}
開発のためにメールで.cerファイルを送信し、Windows Phone Emulator を使用して開くと、Windows Phone はインストールが成功したことを通知しますが、まだエラーが発生しています。
それらは私が使用しているオプションです:
オプション A. httpプロトコルとまったく同じアプローチ
private void Start(string url)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.UseDefaultCredentials = true;
request.AllowAutoRedirect = true;
request.BeginGetResponse(FinishWebRequest, request);
}
public void FinishWebRequest(IAsyncResult result)
{
HttpWebRequest request = result.AsyncState as HttpWebRequest;
if (request != null)
{
try
{
WebResponse response = request.EndGetResponse(result);
Stream streamResponse = response.GetResponseStream();
string responseString = new StreamReader(streamResponse).ReadToEnd();
}
catch (WebException ex)
{
…
}
}
}
オプション B. Web クライアントを使用
private WebClient myWebClient;
public void Start(string requestString)
{
myWebClient = new WebClient();
myWebClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadStringCompleted);
myWebClient.DownloadStringAsync(new System.Uri(requestString));
}
void DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
try
{
string Text = e.Result;
}
catch
{
...
}
}
オプション 3 httpwebrequest の msdn ページの下部にある例と非常によく似ており、オプション 1 にも非常に似ています。
私は何が欠けていますか?認証のインストールは正しいですか?
さらに情報が必要な場合は、お尋ねください
あなたの助けに感謝します。
EDIT 2013/07/18 さらに情報を追加しました。使用できると思います。
Microsoft Internet Explorer を使用して.CERファイルにエクスポートする手順は次のとおりです (私の Windows インストールは英語ではないため、すべてのオプションが私が書いたとおりであるとは限りません)。
- https://myWebApp.comを開きます
- ウィンドウを読み込みます: 「この Web サイトのセキュリティ証明書には問題があります」
- 「このウェブサイトに進む」をクリック
- 上部にある [証明書を表示] をクリックします。
- 詳細タブの「ファイルにコピー」を実行します。
- 結果のファイルをメールで送信し、Windows Phone シミュレーターで開きます。
証明書をエクスポートする前に、証明書がルート認証局の証明書に含まれている必要があるかどうかはわかりません。わかりません。
私が取得している WebException ex には、次のデータがあります。
メッセージ:
"The remote server returned an error: NotFound."
状態:
UnknownError
スタックトレース:
at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at MyApp.Model.Webservice.SecureRestClient.FinishWebRequest(IAsyncResult result)
at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClassa.<InvokeGetResponseCallback>b__8(Object state2)
at System.Threading.ThreadPool.WorkItem.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadPool.WorkItem.doWork(Object o)
at System.Threading.Timer.ring()
編集2
ドキュメント Windows® Phone 7 と証明書では、デバイスを再起動して、最近インストールされた証明書を有効にすることをお勧めします。
証明書を HTC Radar に送信すると、インストールは成功しました。しかし、 Internet Explorer でhttps://myWebApp.comを開くと、「問題があります...」というウィンドウが読み込まれるため、 .cerファイルのエクスポート中に何かが足りないと思います。
編集3
現在、デバイスでデバッグすることは可能ですが (手順のロック解除)、状況は変わりません。さらに情報が必要ですか? 私は何が欠けていますか?私は常に見つからない例外を受け取ります。
ありがとうございました!