.NET 3.5+ で動作する .NET アプリケーションを WinRT に移植しています。これにはChannelFactory<T>
、元のバージョンのほとんどすべてのコード (つまり、同一にできる限り) を共有する (プログラムを使用して作成された) WCF サービス クライアントが含まれています。プログラム。このサービスは、ポート 9443 で SSL 経由でアクセスされ、Windows 認証を使用します。コードの元のバージョンは問題なく動作しますが、WinRT ポートは通常、3 階建ての例外サンドイッチで失敗しますEndpointNotFoundException
。WebException
「リモート サーバーに接続できません」) と内部例外SocketException
(「アクセス許可 192.168.xx:9443 で禁止されている方法でソケットにアクセスしようとしました」)。
奇妙なことに、Fiddler がプロキシとして機能し、トラフィックをキャプチャしない限り、これは一貫して失敗します。
では、詳細を。
- SSL 証明書は、信頼できる機関からの有効なものであり、IIS サイトに添付されたホスト ヘッダー名 (およびその名前のみ) をカバーしています。
- .svc ファイルとその ?wsdl をエラーなしで参照でき、wsdl 自体がアプリケーションから使用した正確な URL を報告します。
- 問題のサイトには、9443 での https と 9999 での http のバインディングがあります (どちらにもホスト ヘッダー名が関連付けられています)。
サイトルートに次のclientaccesspolicy.xmlがあり、適切なポートを介してhttpとhttpsの両方からアクセスできます。
<?xml version="1.0" encoding="utf-8"?> <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="*"> <domain uri="*" /> </allow-from> <grant-to> <resource path="/" include-subpaths="true"/> </grant-to> </policy> </cross-domain-access> </access-policy>
サービスを実行しているサービス アカウントには、UPN が関連付けられています。
<servicePrincipalName/>
これをエンドポイントの に入れてみまし<identity />
たが、役に立ちませんでした。そこを使用して<dns />
も役に立ちませんでした。- 装丁
BasicHttpBinding
付きBasicHttpSecurityMode.Transport
で、セッティングしていますClientCredentialType = HttpClientCredentialType.Windows
。資格情報は現在ハードコードされており、正しいものです。しかし、これは問題ではないと思います。なぜなら... - サービス コールをループで設定し、Alt+Tab キーを押して Fiddler に移動してトラフィックのキャプチャを開始するまで、失敗、失敗、失敗、失敗を監視できます。これにより、サービス呼び出しが Fiddler のローカル プロキシ経由でリダイレクトされることは理解できます。何らかの理由で、これにより完全に機能します。プログラムを再コンパイルするどころか、プログラムを再起動する必要さえありません。
- これは、Fiddler の man-in-the-middle 証明書を信頼済みとしてインストールしたかどうか、SSL セッションをデコードするかどうかに関係なく同じです。
- Fiddler でこれを行ったときに見られるトラフィックは、私にとって特に明るいものではありません。HTTP 401 エラーに続いて接続が成功する標準のネゴシエート ハンドシェイクのように見えます。
- IIS はバージョン 7 です。ログ (inetpub\logs 内) には興味深いものが何も表示されていないようです。
- Wireshark を使用してこれを嗅ぎ出そうとしましたが、結果は基本的に役に立ちません。Fiddler でキャプチャを開始するまでは、Wireshark が何も検出していないように見えますが、トラフィックが発生するまではわかりません。
- [サービス参照の追加] を使用して標準の Visual Studio プロキシを追加しようとすると、カスタム コードとまったく同じ動作になります。
- 念のため、Silverlight のように WinRT のポートに公開されていない制限があるかどうかを確認するために、サイトをポート 4505 に設定しました (4502 ~ 4534 の範囲内になるように)。何も変わっていません。
- インターネット オプションでキャッシュと Cookie をクリアしても問題ないようです。
- Windows ファイアウォールがオフになっています。Windows 8 には、他に考えられるトラフィックの障害はありますか? (デスクトップ アプリは常に正常に動作するため、問題ではありません。)
- Windows Defender のリアルタイム保護がオフになっています。
- シミュレーターでアプリを実行しても動作は同じです。これは Windows 8 の唯一の開発インストールであるため、別の物理マシンでテストすることはできません。
うまくいけば、これは私がこれについてデューデリジェンスを行ったことを示しています. 私は何を逃したのですか?さらに情報を提供できる場合はお知らせください。