0

编辑已修复!:我觉得很傻;因此,经过几天的调查和调试,答案是/是网站设置相同,除了一个我从未想过要看的地方;实时站点上的目录是使用管理共享而不是服务器上的本地物理路径无意中创建的。在实时站点上切换路径后,API 将按预期与其余代码一起工作。

原始问题:

我有两个网站托管在同一个应用程序池中的同一台服务器上。网站 1 是我的测试平台。我有一个试图调用第 3 部分函数的小类,该函数基本上等同于验证给定用户是否存在于第 3 方的允许用户中。如果是,则返回 true,否则返回 false。如果返回为真,它将重定向到该第三方,否则用户对第三方一无所知。

在我的开发站点上,我的代码 100% 没有错误地工作,在任何一种情况下我都能得到预期的结果。它一直在这里工作,从来没有问题。但是,当我将其移动到实时站点时,我会收到Request for the permission of type 'System.Net.WebPermission, Failed。经过广泛的谷歌搜索后,我仍然感到困惑,已经好几天了。这就是我如此困惑的原因:

  1. 运行现场和开发站点的服务器和帐户是相同的。
  2. 他们的应用程序池是同一个
  3. 代码是 100% 相同的。
  4. web.configs 是相同的。

也许其中最令人费解的部分是我在 vb.net 中使用了母版页系统。该代码实际上在母版页的 page_load 事件中执行。开发站点运行没有问题,但是一旦您尝试加载页面,代码就会引发异常。最奇怪的部分是,如果我从母版页 page_load 中取出代码并创建一个新的空白页面,除了这个调用和调用它的 page_load 代码之外什么都没有,它就可以工作。

我已经如此彻底地检查了这个母版页,我不敢相信它在 dev 上工作但不能在现场工作,昨天当我对新页面和相同代码的实验在现场网站上工作时,我完全吃了一惊。

到目前为止,我尝试解决此问题的方法是:

  1. 在 AppPool 中加载用户配置文件 = true
  2. 直接比较代码以确保它是 1:1
  3. 已验证运行此帐户的权限
  4. 重新启动的网络服务器
  5. 通过 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

如果它不是它需要的母版页的一部分,则可以在 Live 站点上正常工作,在任何地方的开发站点上都可以正常工作。完全被难住了。如果我的格式很差或者我的问题不够清晰,我们深表歉意;第一次来电,长期聆听。

最后一条重要信息是,使用他们的 API 需要引用第 3 方的 dll - 这似乎是一个有效的争论点,除了它适用于我创建的空白页面,只是不适用于这个母版页与开发站点的母版页相同。

提前感谢您提供的任何信息。

4

0 回答 0