4

.NET 3.5+ で動作する .NET アプリケーションを WinRT に移植しています。これにはChannelFactory<T>、元のバージョンのほとんどすべてのコード (つまり、同一にできる限り) を共有する (プログラムを使用して作成された) WCF サービス クライアントが含まれています。プログラム。このサービスは、ポート 9443 で SSL 経由でアクセスされ、Windows 認証を使用します。コードの元のバージョンは問題なく動作しますが、WinRT ポートは通常、3 階建ての例外サンドイッチで失敗しますEndpointNotFoundExceptionWebException「リモート サーバーに接続できません」) と内部例外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 の唯一の開発インストールであるため、別の物理マシンでテストすることはできません。

うまくいけば、これは私がこれについてデューデリジェンスを行ったことを示しています. 私は何を逃したのですか?さらに情報を提供できる場合はお知らせください。

4

1 に答える 1

6

アプリケーションのマニフェストでイントラネット/インターネット ネットワーク アクセスを設定しましたか?

于 2012-09-20T06:08:19.570 に答える