編集修正済み!: 私はばかげていると感じます。したがって、何日にもわたる調査とデバッグの後、答えは、私が見たことのない1つの場所を除いて、Webサイトが同じように設定されていたということです。ライブ サイトのディレクトリは、サーバー上のローカル物理パスではなく、管理共有を使用して誤って作成されました。ライブ サイトでパスを切り替えた後、API は残りのコードで意図したとおりに動作します。
元の問題:
同じアプリ プール内の同じサーバーでホストされている 2 つの Web サイトがあります。Web サイト 1 は私のテスト ベッドです。基本的に、特定のユーザーがサードパーティの許可されたユーザーに存在することを確認することと同等のサードパーティ関数を呼び出そうとする小さなクラスがあります。そうである場合は true を返し、そうでない場合は false を返します。戻り値が true の場合、このサード パーティにリダイレクトされます。それ以外の場合、ユーザーはサード パーティについて何も知りません。
私の開発サイトでは、エラーなしで 100% 動作するコードがあり、どちらの場合も期待どおりの結果が得られます。ここでは常に機能しており、問題はありません。ただし、ライブサイトに移動すると、タイプ 'System.Net.WebPermission, Failed のアクセス許可の要求が表示されます。大規模なグーグル検索の後、私はまだ困惑したままです。それは何日も経ちました。これが私がとても困惑している理由です:
- ライブ サイトと開発サイトが実行されるサーバーとアカウントは同一です。
- それらのアプリケーション プールは同じものです
- コードは 100% 同一です。
- web.config は同一です。
おそらく、これで最も不可解な部分は、私が vb.net でマスターページ システムを使用していることです。コードは実際には、マスター ページの page_load イベントで実行されます。開発サイトは問題なく実行されますが、ページを読み込もうとするとすぐにコードが例外をスローします。最も奇妙な部分は、マスター ページの page_load からコードを取り出して、この呼び出しとそれを呼び出す page_load コードだけで新しい空白のページを作成すると、機能することです。
私はこのマスターページを徹底的に調べましたが、ライブではなく開発では機能するとは信じられません.昨日、新しいページと同じコードを使った実験がライブサイトで機能したとき、私は完全にびっくりしました.
これを解決するためにこれまでに試したこと:
- AppPool でユーザー プロファイルを読み込む = true
- コードを直接比較して、1:1 であることを確認しました
- これが実行されるアカウントの確認済みの権限
- 再起動した Web サーバー
- web/config 経由で完全な信頼を設定する
私は途方に暮れています。以下にコードを示します。これは非常に単純ですが、この問題は解決しません。必要な特定のページではなく、ライブサイトで機能する理由がわかりません。それぞれのコードは次のとおりです。
Sub page_load()
If Not Page.IsPostBack Then
Dim SFUser As New StorefrontUser
'Response.Write(SFUser.GetadminticketValue)
If SFUser.isActiveStorefrontUser = 1 Then
LBCELink.Style.Add("visibility", "visible")
Else
LBCELink.Style.Add("visibility", "hidden")
End If
End If
End Sub
呼び出すクラス/関数は次のとおりです。 Public Class StorefrontUser Dim storefront As New SXI.StorefrontAPIHelper("http://subdomain.blah.com/3rdpartyAPI.asmx")
Function isActiveStorefrontUser() As String
If GetAdminTicket() <> "UNAUTHORIZED ACCESS" Then
Return storefront.GetValue("UserProperty", "IsActive", storefront.FindUserID(theID))
Else
Return "1"
End If
End Function
Function GetadminticketValue() As String
Return GetAdminTicket()
End Function
Public Function GetAdminTicket() As String
Dim ScratchTicket As String = String.Empty
Try
ScratchTicket = storefront.ObtainUserTicket("user", "password", "Identity")
Catch ex As Exception
HttpContext.Current.Response.Write(ex.ToString)
ScratchTicket = String.Empty
End Try
Return ScratchTicket
End Function
End Class
必要なマスター ページの一部でない場合は、ライブ サイトで正常に動作し、どこの開発サイトでも正常に動作します。完全に困惑した。私の書式設定が不十分であるか、質問が明確でない場合はお詫び申し上げます。初めての発信者、長年の聞き手。
最後の重要な情報は、API を利用するにはサードパーティの dll への参照が必要だということです。開発サイトのマスター ページと同じです。
あなたが流すことができる光を前もって感謝します。