简体   繁体   English

会员凭证验证问题在不应该使用时失败

[英]having an issue with membership credential verification failed when it shouldn't be using it

Since our website cannot take credit cards directly we are routing the user, with credential and other misc variables, to a 'hosted page' on another site. 由于我们的网站无法直接使用信用卡,因此我们会将凭证和其他misc变量的用户路由到另一个网站上的“托管页面”。

To go more in detail, this is how the user would access this generally: 为了更详细,这是用户通常如何访问它:

  1. Go to our site and login with a username and password that they created previously. 转到我们的网站并使用他们之前创建的用户名和密码登录。 This uses the asp.net membership provider. 这使用asp.net成员资格提供程序。

  2. Once logged in, we show them their account and they have a button to make a payment. 登录后,我们会向他们显示他们的帐户,并且他们有一个按钮来进行付款。 Once they click this... 一旦他们点击这个......

  3. They are prompted with a 'prepayment' page to verify the amount and various other bits of information. 系统会提示他们使用“预付款”页面来验证金额和其他各种信息。 They click continue from here... 他们点击这里继续......

  4. So, the payment page is displayed within an iframe of our website. 因此,付款页面显示在我们网站的iframe中。 We redirect them to the external hosted webpage with the following code: 我们使用以下代码将它们重定向到外部托管网页:

    < div align="center"> < iframe width="100%" height="600px" src="@Html.Raw(@ViewBag.GateWayWebsite)"> < /div> <div align =“center”> <iframe width =“100%”height =“600px”src =“@ Html.Raw(@ ViewBag.GateWayWebsite)”> </ div>

  5. Once the payment page has been entered and the customer clicks submit, that site submits a post back to our website where they began and passes back the information about the charge. 输入付款页面并且客户点击提交后,该网站会将帖子提交回我们开始的网站并传回有关费用的信息。 I grab this information and save it to our database and display a receipt. 我抓住这些信息并将其保存到我们的数据库并显示收据。

Everything works fine except for #5. 一切都很好,除了#5。 That works most of the time but about 1 in 10 come back with this message: 这大部分时间都有效,但大约有十分之一的人回来了这条消息:

Event code: 4006 
Event message: Membership credential verification failed. 
Event time: 12/16/2013 4:32:22 AM 
Event time (UTC): 12/16/2013 12:32:22 PM 
Event ID: 42c509f2a25d46f0af17e72a52dfbbe5 
Event sequence: 38 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/3/ROOT/SuburbanCustPortal-1-130316693110399868 
    Trust level: Full 
    Application Virtual Path: /SuburbanCustPortal 
    Application Path: C:\inetpub\wp\SuburbanCustPortal\ 
    Machine name: WIN-OB929P97YAR 

Process information: 
    Process ID: 3620 
    Process name: w3wp.exe 
    Account name: NT AUTHORITY\NETWORK SERVICE 

Request information: 
    Request URL: https://myurl:443/SuburbanCustPortal/Account/Logon2 
    Request path: /SuburbanCustPortal/Account/Logon2 
    User host address: xx.xx.xx.xx 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: NT AUTHORITY\NETWORK SERVICE 

Name to authenticate: testuser 

I cannot get to happen on the handful of test cases that I've run which makes it that much more frustrating. 我无法在我运行的一些测试用例中发生这种情况,这使得它更令人沮丧。

This is my web.config: 这是我的web.config:

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->
<configuration>

  <appSettings>
    <add key="webpages:Version" value="1.0.0.0"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    <add key="suburbanServiceUrl" value=""/>
  </appSettings>

  <system.web>

    <sessionState
      mode="InProc"
      stateConnectionString="tcpip=127.0.0.1:42424"
      stateNetworkTimeout="60"
      sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
      cookieless="false"
      timeout="60"
    />

    <customErrors mode="Off"/>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </assemblies>
    </compilation>
    <authentication mode="Forms">
      <!-- timeout: Gets and sets the amount of time, in minutes, allowed between requests
                    before the session-state provider terminates the session. -->
      <forms loginUrl="~/Account/LogOn" timeout="60"/>
    </authentication>

    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider"
             type="System.Web.Security.SqlMembershipProvider"
             connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false"
             enablePasswordReset="true"
             requiresQuestionAndAnswer="false"
             requiresUniqueEmail="true"
             maxInvalidPasswordAttempts="30"
             minRequiredPasswordLength="6"
             minRequiredNonalphanumericCharacters="0"
             passwordAttemptWindow="10"
             applicationName="webportal"/>
      </providers>

    </membership>

    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
      </providers>
    </profile>

    <roleManager enabled="true">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/"/>
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/"/>
      </providers>
    </roleManager>

    <pages enableSessionState="true">
      <namespaces>
        <add namespace="System.Web.Helpers"/>
        <add namespace="System.Web.Mvc"/>
        <add namespace="System.Web.Mvc.Ajax"/>
        <add namespace="System.Web.Mvc.Html"/>
        <add namespace="System.Web.Routing"/>
        <add namespace="System.Web.WebPages"/>
      </namespaces>
    </pages>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="Session"/>
      <add name="Session" type="System.Web.SessionState.SessionStateModule"/>
    </modules>
    <httpProtocol>
    </httpProtocol>
    <staticContent>
      <clientCache cacheControlCustom="public"
      cacheControlMaxAge="00:00:01" cacheControlMode="UseMaxAge" />
    </staticContent>   
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_ISuburbanService" maxReceivedMessageSize="128072" />
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:2181/ISuburbanService.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISuburbanService"
        contract="SuburbanService.ISuburbanService" name="BasicHttpBinding_ISuburbanService" />
    </client>
    <!--<bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_ISuburbanService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
          messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
          useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="Transport">
            <transport clientCredentialType="Basic" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://localhost/SuburbanHUB/ISuburbanService.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISuburbanService"
        contract="SuburbanService.ISuburbanService" name="BasicHttpBinding_ISuburbanService" />
    </client>-->
    <!--<behaviors>
      <serviceBehaviors>
        <behavior name="SomeServiceServiceBehavior">
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>-->
  </system.serviceModel>
</configuration>

And the method that captures the post: 并且捕获帖子的方法:

  [NoCache]
    [HttpPost]
    public ActionResult Receipt(string id)
    {
      var sb = new StringBuilder();
      try
      {
        sb.AppendLine("ActionResult Reciept(string account)");

        var count = 0;
        var postVals = new Dictionary<string, string>();
        foreach (var key in Request.Form.AllKeys)
        {
          sb.AppendLine("count: " + count);
          sb.AppendLine(string.Format("key:   {0}    Value:   {1}", key, Request.Form[key]));
          postVals.Add(key, Request.Form[key]);
          sb.AppendLine("finished count: " + count);
          count++;
        }
        sb.AppendLine("finished processing ALLKeys");
        var paymentReq = createPaymentRequest(postVals);
        sb.AppendLine("finished processing 'var paymentReq = createPaymentRequest(postVals)' ");
        var receipt = _client.RecordPaymentWithRequest(paymentReq);

        var retval = PartialView(receipt.Duplicate ? "Duplicate Receipt" : "Receipt", receipt);
        sb.AppendLine(string.Format("retval: {0}", retval));
        return retval;

      }
      catch (Exception ex)
      {
        sb.AppendLine(string.Format("Receipt error: {0}", ex.Message));
        Logging.LogException("Receipt error!", ex, _asName);
        throw;
      }
      finally
      {
        Logging.LogInfo(sb.ToString(), _asName);
      }
    }

As you can see above, I don't have [Authorize] on it so it shouldn't be requiring membership provider to check for access. 如您所见,我没有[Authorize] ,因此不应要求会员提供商检查访问权限。 The class level does not either. 班级也没有。

Anyone have any suggestions of what might be going on? 任何人都对可能发生的事情有任何建议吗?

UPDATE UPDATE

2013-12-16 04:22:14 xxx.xxx.xxx.xxx GET /SuburbanCustPortal/Scripts/Views/logon.js - 443 - xxx.xxx.xxx.xxx Mozilla/5.0+(Linux;+Android+4.2.2;+en-us;+SAMSUNG+SGH-M919+Build/JDQ39)+AppleWebKit/535.19+(KHTML,+like+Gecko)+Version/1.0+Chrome/18.0.1025.308+Mobile+Safari/535.19 304 0 0 109
2013-12-16 04:22:14 xxx.xxx.xxx.xxx GET /SuburbanCustPortal/Content/images/mod/modavoca.png - 443 - xxx.xxx.xxx.xxx Mozilla/5.0+(Linux;+Android+4.2.2;+en-us;+SAMSUNG+SGH-M919+Build/JDQ39)+AppleWebKit/535.19+(KHTML,+like+Gecko)+Version/1.0+Chrome/18.0.1025.308+Mobile+Safari/535.19 304 0 0 93
2013-12-16 04:22:15 xxx.xxx.xxx.xxx GET /Content/favicon.ico - 443 - xxx.xxx.xxx.xxx Mozilla/5.0+(Linux;+Android+4.2.2;+en-us;+SAMSUNG+SGH-M919+Build/JDQ39)+AppleWebKit/535.19+(KHTML,+like+Gecko)+Version/1.0+Chrome/18.0.1025.308+Mobile+Safari/535.19 404 0 2 250
2013-12-16 04:22:15 xxx.xxx.xxx.xxx GET /apple-touch-icon-precomposed.png - 443 - xxx.xxx.xxx.xxx Mozilla/5.0+(Linux;+Android+4.2.2;+en-us;+SAMSUNG+SGH-M919+Build/JDQ39)+AppleWebKit/535.19+(KHTML,+like+Gecko)+Version/1.0+Chrome/18.0.1025.308+Mobile+Safari/535.19 404 0 2 250
2013-12-16 04:22:15 xxx.xxx.xxx.xxx GET /apple-touch-icon.png - 443 - xxx.xxx.xxx.xxx Mozilla/5.0+(Linux;+Android+4.2.2;+en-us;+SAMSUNG+SGH-M919+Build/JDQ39)+AppleWebKit/535.19+(KHTML,+like+Gecko)+Version/1.0+Chrome/18.0.1025.308+Mobile+Safari/535.19 404 0 2 78
#Software: Microsoft Internet Information Services 7.0
#Version: 1.0
#Date: 2013-12-16 04:39:52
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2013-12-16 04:39:52 xxx.xxx.xxx.xxx GET / - 443 - xxx.xxx.xxx.xxx - 200 0 0 171
2013-12-16 04:50:12 xxx.xxx.xxx.xxx POST /SuburbanHUB/ISuburbanService.svc - 443 suburbansoftware xxx.xxx.xxx.xxx - 200 0 0 875
2013-12-16 04:50:12 xxx.xxx.xxx.xxx POST /SuburbanHUB/ISuburbanService.svc - 443 suburbansoftware xxx.xxx.xxx.xxx - 200 0 0 187
2013-12-16 04:50:12 xxx.xxx.xxx.xxx GET /SuburbanCustPortal/Account/Verify id=dde4bbfb-0d2e-4706-a604-36eea3fdcae3&verifyid=c0b4fdb5-9bb3-4d2b-b724-df42e6ea2a59 443 - xxx.xxx.xxx.xxx Mozilla/5.0+(iPhone;+CPU+iPhone+OS+7_0_3+like+Mac+OS+X)+AppleWebKit/537.51.1+(KHTML,+like+Gecko)+Version/7.0+Mobile/11B511+Safari/9537.53 200 0 0 1328
2013-12-16 04:50:12 xxx.xxx.xxx.xxx GET /SuburbanCustPortal/Content/reset.css - 443 - xxx.xxx.xxx.xxxMozilla/5.0+(iPhone;+CPU+iPhone+OS+7_0_3+like+Mac+OS+X)+AppleWebKit/537.51.1+(KHTML,+like+Gecko)+Version/7.0+Mobile/11B511+Safari/9537.53 200 0 0 453

There is a lapse in the log from 04:22:15 through 04:39:52 从04:22:15到04:39:52,日志中有一段时间失效

Is this normal? 这是正常的吗?

EDIT 编辑

I clarified the steps above for those who asked. 我为那些提出要求的人澄清了上述步骤。

That's awfully suspicious to happen right at that time. 那个时候发生的事情非常可疑。

I would agree, but it seems that in step #4 you redirect off the site, and then the user does data entry. 我同意,但似乎在第4步中你重定向网站,然后用户进行数据输入。 If a user occasionally takes 10-20 minutes to enter that information (due to distraction, etc.), it makes it much more likely than if it were just a simple race condition. 如果用户偶尔需要10-20分钟来输入该信息(由于分心等),这比仅仅是一个简单的竞争条件更有可能。

If you still have the data from all the errors, you may be able to look back to see if you can find a pattern to the times when this happens (or every xx hours--see below). 如果您仍然拥有所有错误的数据,您可以回头查看是否可以找到发生这种情况的时间模式(或每隔xx小时 - 见下文)。

  1. Check your IIS settings to see when the app pool recycles. 检查您的IIS设置以查看应用程序池何时回收。 Does it recycle around 4am every night? 它是否每晚凌晨4点左右回收? Is it on a rolling schedule? 它是否按计划进行? By default, IIS recycles on some odd number of hours for some reason (I think every 28 hours). 默认情况下,IIS由于某种原因(我认为每28小时)在几个小时内回收。
  2. Get off of InProc Session state and into State Server (or SQL). 脱离InProc会话状态并进入State Server(或SQL)。 InProc is only going to cause you pain anyway in the long run. 从长远来看,InProc无论如何都会让你感到痛苦。 Note that when you make this change, you have to ensure that all objects you put into session are serializable, otherwise you will get errors. 请注意,进行此更改时,必须确保放入会话的所有对象都是可序列化的,否则您将收到错误。 InProc does not require objects to be serialized in session. InProc不需要在会话中序列化对象。

Edit: Ok, to check your app pool recycling: 编辑:好的,检查你的应用程序池回收:

  1. In IIS Manager, select the appropriate app pool and select Advanced Settings (right click or use right side menu). 在IIS管理器中,选择相应的应用程序池,然后选择“高级设置”(右键单击或使用右侧菜单)。
  2. Scroll to the bottom, to section Recycling 滚动到底部,到“回收”部分
  3. Regular Time Interval will reset the app pool every xx minutes. 常规时间间隔将每隔xx分钟重置应用程序池。 The default is 1740 minutes, or every 29 hours. 默认值为1740分钟,或每29小时。
  4. The Specific Times setting allows you to set a scheduled time for it to recycle. “特定时间”设置允许您设置回收的预定时间。

In general, you DO want to recycle the app pool periodically (probably daily). 通常,您希望定期(可能每天)回收应用程序池。

To answer your second question: if this is indeed the cause, it's not a question of timeout; 回答你的第二个问题: 如果这确实是原因,那不是暂停的问题; it's a question of whether the app pool recycles during the period of time between when they are redirected away and when they get redirected back. 这是一个问题,即应用程序池是否在重定向到重定向之间的时间段内进行循环。 Changing your session state to something other than InProc should solve this problem. 将会话状态更改为InProc以外的其他内容应该可以解决此问题。

That said, the session expiring could ALSO be the cause of this, so setting your session timeout to a larger value could also resolve this. 也就是说,会话到期也可能是导致此问题的原因,因此将会话超时设置为更大的值也可以解决此问题。

If you take a more extensive look at the logs during periods of time when this happened, it might give more clues to what is happening. 如果您在发生这种情况的时间段内更详细地查看日志,则可能会提供更多有关正在发生的事情的线索。

Edit #2 编辑#2

See if you can isolate the occurrences of the error in the logs. 查看是否可以隔离日志中出现的错误。 If you can, see if there is a pattern to the browser that is being used. 如果可以,请查看是否存在正在使用的浏览器模式。 I would also look for other patterns to see if anything jumps out. 我也会寻找其他模式,看看有没有跳出来。

You might just test with a bunch of different browsers (including mobile) to see if you can reproduce. 您可能只是尝试使用一堆不同的浏览器(包括移动设备)来查看是否可以重现。 Also, try different versions of IE and different security settings on IE. 此外,尝试不同版本的IE和IE上的不同安全设置。

The few things I found in your web.config are - 我在你的web.config中找到的一些东西是 -

  1. You have multiple applicationName . 您有多个applicationName Normally, IsUserInRole and GetRolesForUser should fail if applicationName are not same. 通常,如果applicationName不相同,则IsUserInRoleGetRolesForUser应该失败。

  2. In addition, you want to set defaultProvider for each provider especially if you have more than one provider like roleManager - <roleManager ... defaultProvider="DefaultRoleProvider"> 此外,您希望为每个提供程序设置defaultProvider ,特别是如果您有多个提供程序,如roleManager - <roleManager ... defaultProvider="DefaultRoleProvider">

Current Web.config 当前的Web.config

<membership>
   <providers>
      <clear/>
          <add ... applicationName="webportal"/>
   </providers>
</membership>

<profile>
   <providers>
      <clear/>
      <add ... applicationName="/"/>
    </providers>
</profile>

<roleManager enabled="true">
   <providers>
      <clear/>
      <add ... applicationName="/"/>
      <add ...  applicationName="/"/>
   </providers>
</roleManager>

Take a look at web.config of Scott Hanselman's ASP.NET Universal Providers blog. 看看Scott Hanselman的ASP.NET Universal Providers博客的web.config。

<sessionState
   mode="InProc"
   stateConnectionString="tcpip=127.0.0.1:42424"
   stateNetworkTimeout="60"
   sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
   cookieless="false"
   timeout="60"
/>

You do not need stateConnectionString , stateNetworkTimeout and sqlConnectionString for InProc . InProc不需要stateConnectionStringstateNetworkTimeoutsqlConnectionString More information here . 更多信息在这里

Please refer to the following article by ScottGu http://weblogs.asp.net/scottgu/archive/2006/04/22/Always-set-the-_2200_applicationName_2200_-property-when-configuring-ASP.NET-2.0-Membership-and-other-Providers.aspx . 请参阅ScottGu的以下文章http://weblogs.asp.net/scottgu/archive/2006/04/22/Always-set-the-_2200_applicationName_2200_-property-when-configuring-ASP.NET-2.0-会员 -和其他Providers.aspx

In addition,make sure that the “ApplicationName” value in “aspnet_Applications” database table and the “applicationName” property value for all providers in web.config (Membership provider, Role provider, Profile provider etc.) must have the same value carefully again. 此外,请确保“aspnet_Applications”数据库表中的“ApplicationName”值和web.config中的所有提供程序的“applicationName”属性值(成员资格提供程序,角色提供程序,配置文件提供程序等)必须再次仔细地具有相同的值。

Hope this would fix your problem! 希望这能解决你的问题!

Its been a while since I have troubleshot issues like this (but I did it for pss over 7 yrs ago). 我已经有一段时间了,因为我有这样的麻烦问题(但我7年前为pss做过)。

Everything that @PhilSandler recommended is good. @PhilSandler推荐的一切都很好。 However I have a gut feeling the root cause is NOT AppPool recycling or Session time outs, if you do get desperate you could try Out-Of-Process Session State . 然而,我有一种直觉,根本原因不是AppPool回收或会话超时,如果你真的绝望,你可以尝试进程外会话状态

I'm thinking if its roughly 1 out of 10 users and it appears intermittent (as you cannot reproduce it), then its probably going to be a browser specific setting. 我在想它是否有大约十分之一的用户并且它看起来是间歇性的(因为你无法重现它),那么它可能是一个特定于浏览器的设置。 I'm guessing users which encounter the problem have cookies disabled in their browsers (FF and Chrome users are more switched on than regular IE users). 我猜测遇到问题的用户在其浏览器中禁用了Cookie (FF和Chrome用户比常规IE用户更加开启)。

This hypothesis would slightly match up with @SilverlightFox theory: 这个假设与@SilverlightFox理论略微匹配:

the frameset that is preventing 3rd party cookies 阻止第三方cookie的框架集


<authentication mode="Forms">

I'm thinking that the forms authentication cant store the session data on client side. 我认为表单身份验证无法在客户端存储会话数据。 Membership credential verification failed event log entries can be caused due to disabled cookies. 会员凭证验证失败事件日志条目可能是由于禁用的cookie引起的。

Please disable cookies in FF or Chrome and try out my hypothesis. 请在FF或Chrome中禁用Cookie并尝试我的假设。 Fingers crossed this allows you to reproduce it. 手指越过这个允许你重现它。

After looking around the web, here are the solutions I've found where people have had your 4006 error and ultimately fixed the issue. 浏览网页后,我找到了解决方案,我发现人们遇到了4006错误并最终解决了问题。

  • applicationName field set to "/" . applicationName字段设置为“/” - This is the most common conversation about your issue. - 这是关于您的问题的最常见的对话。 But, your applicationName field looks fine so that's definitely not it. 但是,你的applicationName字段看起来很好,所以绝对不是它。

  • Problem with ActiveDirectoryMembershipProvider - Link . ActiveDirectoryMembershipProvider问题 - 链接 This seems unlikely to be your problem because you're using the SqlMembershipProvider . 这似乎不太可能是您的问题,因为您使用的是SqlMembershipProvider

  • Internet user missing permissions on the .mdf and .ldf files - Link . Internet用户缺少.mdf和.ldf文件的权限 - 链接 The references to this problem that I saw were with people using SQLExpress because it runs under the ASP.NET user account and needs read/write access. 我看到的这个问题的引用是人们使用SQLExpress,因为它在ASP.NET用户帐户下运行并需要读/写访问权限。 Again, this seems unlikely to be be your problem because your only having it intermittently. 再次,这似乎不太可能是你的问题,因为你只是间歇性地拥有它。 But it is related to the 4006 error, so verifying permissions on the user seems worth looking at. 但它与4006错误有关,因此验证用户的权限似乎值得一看。

  • Duplicated User Passwords - I didn't save a link, but if you don't have unique constraints on both username and password in the database, it can return the 4006 response. 重复的用户密码 - 我没有保存链接,但如果您对数据库中的用户名和密码没有唯一约束,则可以返回4006响应。 So, far this seems most probable too me because it would explain the intermittent behavior and because people frequently double-click when using the internet. 所以,这似乎也是最有可能的,因为它可以解释间歇性行为,因为人们经常在使用互联网时双击。 I would double and triple check your constraints. 我会加倍检查你的约束。

I'll be happy to see what else I can find, but ruling out the last two of these first seems like a good idea. 我会很高兴看到我能找到的其他东西,但排除其中的最后两个似乎是一个好主意。 Also, the thing that seems the most odd about the gap in your logs is the fact that the EventLog data shows the error happening almost in the middle of the IIS gap. 此外,对于日志中的差距而言似乎最奇怪的事情是EventLog数据显示几乎在IIS间隙中间发生的错误。 Then after it resumes, there is another log gap. 然后在它恢复后,还有另一个对数间隙。 It looks like it might be two completely different users. 它看起来可能是两个完全不同的用户。 Maybe not, Just throwing that out there. 也许不是,只是扔那里。 Let me know. 让我知道。 Good luck. 祝好运。

I notice that the src isn't set correctly on the IFrame. 我注意到在IFrame上没有正确设置src

<div align="center"> <iframe width="100%" height="600px" src="@Html.Raw(@ViewBag.GateWayWebsite)"></iframe></div>

The GateWayWebsite should be properly HTML encoded in case it contains special characters that are relevant but are not being passed properly: 如果GateWayWebsite包含相关但未正确传递的特殊字符,则应对其进行正确的HTML编码:

<div align="center"> <iframe width="100%" height="600px" src="@ViewBag.GateWayWebsite"></iframe></div>

Another thought is that it could be that the frameset that is preventing 3rd party cookies - either the browser setting or the P3P privacy policy header . 另一个想法是,它可能是阻止第三方cookie的框架集 - 浏览器设置P3P隐私策略标头 Try opening the link outside of the IFrame (ie so the address bar changes to the external site), just as a test to see if this resolves your issues. 尝试打开IFrame 外部的链接(即地址栏更改为外部站点),就像测试一样,看看这是否能解决您的问题。

Edit: I shouldn't have edited my answer as you have now reverted your upvote. 编辑:我不应该编辑我的答案,因为你现在已经恢复了你的upvote。 My answer is technically correct, although it might not be the answer that fixes your current problem, I am right that the output of the URL is wrong as you are not HTML encoding it. 我的答案在技术上是正确的,虽然它可能不是解决当前问题的答案,但我认为URL的输出是错误的,因为你不是HTML编码它。 I find it is best to fix everything as this reduces the chances of niggly bugs occurring in future that are difficult to debug. 我发现最好修复所有内容,因为这样可以减少将来发生的难以调试的错误机会。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM