DataPortal.Fetch failed (Object reference not set to an instance of an object.)

DataPortal.Fetch failed (Object reference not set to an instance of an object.)

Old forum URL: forums.lhotka.net/forums/t/6044.aspx


Lyndon posted on Tuesday, December 23, 2008

Hi Everyone,

Im awaiting shipment of Rocky's latest book- so this might be documented in there. But ahead of it, I have the following question.

I am in the process of converting an application that i have running successfully under CSLA 2.1 to 3.6.

I have created my business objects in two different ways- one along the model that Rocky provides in his Project Tracker application sample for 3.6, and the other way using the latest codesmith templates on codeplex.

In both cases the business objects compile successfully, but when they are run they result in the above error message when i attempt to call the object.

Here is the code for from the codesmith templates I generated:

//------------------------------------------------------------------------------

// <autogenerated>

// This code was generated using CSLA 2.x CodeSmith Template Collection.

// Changes to this file may be lost if the code is regenerated.

// Modify user class PriorityList.cs to extend this generated code.

//

// Code was generated at 12/20/2008 7:49:41 PM by Lyndon

// Template path: C:\Users\Lyndon\Downloads\CSLAcontrib-44818\CodeGenTemplates\CodeSmith\CSLA35\CSharp\EditableRootList.cst

// Template website: http://www.codeplex.com/Wiki/View.aspx?ProjectName=CSLAcontrib

// </autogenerated>

//------------------------------------------------------------------------------

using System;

using System.Linq;

using Csla;

using Csla.Data;

using HRSM2010.DAL;

namespace HRSM2010.Library

{

[Serializable()]

public partial class PriorityList : BusinessListBase<PriorityList, Priority>

{

#region BindingList Overrides

protected override object AddNewCore()

{

Priority item = Priority.NewPriority();

this.Add(item);

return item;

}

#endregion //BindingList Overrides

 

#region Factory Methods

private PriorityList()

{ /* require use of factory method */ }

public static PriorityList NewPriorityList()

{

return DataPortal.Create<PriorityList>();

}

public static PriorityList GetPriorityList()

{

return DataPortal.Fetch<PriorityList>();

}

#endregion //Factory Methods

#region Data Access

#region Data Access - Create

[RunLocal]

protected override void DataPortal_Create()

{

bool cancel = false;

OnCreating(ref cancel);

if (cancel) return;

 

OnCreated();

}

partial void OnCreating(ref bool cancel);

partial void OnCreated();

#endregion //Data Access - Create

#region Data Access - Fetch

private void DataPortal_Fetch()

{

bool cancel = false;

OnFetching(ref cancel);

if (cancel) return;

using (var mgr = ContextManager<HRSM2010.DAL.HRSMDynDataContext>

.GetManager(Database.HRSMDyn))

{

RaiseListChangedEvents = false;

this.AddRange(

from row in mgr.DataContext.PriorityTables

select Priority.GetPriority(row.PriorityCode)

);

RaiseListChangedEvents = true;

}//using

 

OnFetched();

}

partial void OnFetching(ref bool cancel);

partial void OnFetched();

#endregion //Data Access - Fetch

#region Data Access - Update

protected override void DataPortal_Update()

{

bool cancel = false;

OnUpdating(ref cancel);

if (cancel) return;

using (var mgr = ContextManager<HRSM2010.DAL.HRSMDynDataContext>

.GetManager(Database.HRSMDyn))

{

DataPortal.UpdateChild(this);

mgr.DataContext.SubmitChanges();

}//using

OnUpdated();

}

partial void OnUpdating(ref bool cancel);

partial void OnUpdated();

#endregion //Data Access - Update

#endregion //Data Access

}

}

I am intending to use Windows Authentication purely. In CSLA 2.1 , I dont think I had to use the Security folder and objects to get this working. ie I wasnt using  form login. However, in 3.6 when I set up Authentication Mode="Windows" in the web.config file, I am getting error in the above subject line.

Am I missing something here? ie is the  equivalent of security folder in the PTtracker example required in my application even if I am using Windows integrated security?  Am I correct in assuming the fetch isnt successful because of authenication?

Thanks in advance for any help.

ajj3085 replied on Tuesday, December 23, 2008

Well I can't be sure, since you never mention if you get an exception.

So this is just off the top of my head... in your web.config, did you also set <identity impersonate="true"/>.

Andy

Lyndon replied on Tuesday, December 23, 2008

yes I did. It comes up with a data portal exception aboce in subject line

 Here is web.config below ( error occurs when  allow users="*" is set- when deny users="?" is set I simply get an 'Access is denied' from IIS)

<?xml version="1.0"?>

<configuration>

<configSections>

<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>

<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>

<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>

<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>

<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>

</sectionGroup>

</sectionGroup>

</sectionGroup>

</configSections>

<appSettings>

<add key="CslaAuthentication" value="Windows"/>

<!--<add key="CslaDataPortalProxy" value="Csla.DataPortalClient.RemotingProxy, Csla"/>

<add key="CslaDataPortalUrl" value="http://localhost:3134/RemotingHost/RemotingPortal.rem"/>-->

<!--<add key="CslaDataPortalProxy" value="Csla.DataPortalClient.WebServicesProxy, Csla"/>

<add key="CslaDataPortalUrl" value="http://localhost:3137/WebServicesHost/WebServicePortal.asmx"/>-->

<!--<add key="CslaDataPortalProxy" value="EnterpriseServicesHost.EnterpriseServicesProxy, EnterpriseServicesHostvb"/>-->

</appSettings>

<connectionStrings>

<add name="HRSM2010.DAL.Properties.Settings.HRSMDynConnectionString1"

connectionString="Data Source=LYNDON-MAIN\VS2008;Initial Catalog=HRSMDyn;Integrated Security=True;"

providerName="System.Data.SqlClient" />

<add name="SqlRoleManagerConnection" connectionString="Data Source=LYNDON-MAIN\VS2008;Initial Catalog=HRSMDyn;Integrated Security=SSPI;Persist Security Info=False;"/>

<!--<add name="LocalSqlServer" connectionString="Data Source=LYNDON-MAIN\VS2008;Initial Catalog=HRSMDyn;Integrated Security=True" providerName="System.Data.SqlClient"/>-->

</connectionStrings>

<system.web>

<!--

Set compilation debug="true" to insert debugging

symbols into the compiled page. Because this

affects performance, set this value to true only

during development.

Visual Basic options:

Set strict="true" to disallow all data type conversions

where data loss can occur.

Set explicit="true" to force declaration of all variables.

-->

<!--<roleManager enabled="true" defaultProvider="SqlRoleManager">

<providers>

<clear/>

<add name="SqlRoleManager" type="System.Web.Security.SqlRoleProvider" connectionStringName="SqlRoleManagerConnection" applicationName="HRSM2007"/>

</providers>

</roleManager>-->

<compilation debug="true" strict="false" explicit="true">

<assemblies>

<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>

<add assembly="PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add assembly="PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add assembly="System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add assembly="System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

</assemblies>

</compilation>

<pages>

<namespaces>

<clear/>

<add namespace="System"/>

<add namespace="System.Collections"/>

<add namespace="System.Collections.Generic"/>

<add namespace="System.Collections.Specialized"/>

<add namespace="System.Configuration"/>

<add namespace="System.Text"/>

<add namespace="System.Text.RegularExpressions"/>

<add namespace="System.Linq"/>

<add namespace="System.Xml.Linq"/>

<add namespace="System.Web"/>

<add namespace="System.Web.Caching"/>

<add namespace="System.Web.SessionState"/>

<add namespace="System.Web.Security"/>

<add namespace="System.Web.Profile"/>

<add namespace="System.Web.UI"/>

<add namespace="System.Web.UI.WebControls"/>

<add namespace="System.Web.UI.WebControls.WebParts"/>

<add namespace="System.Web.UI.HtmlControls"/>

</namespaces>

<controls>

<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

</controls>

</pages>

<!--

The <authentication> section enables configuration

of the security authentication mode used by

ASP.NET to identify an incoming user.

-->

<authentication mode="Windows"/>

<identity impersonate="true"/>

<!--<forms loginUrl="Login.aspx" name="ptracker"/>

</authentication>-->

<authorization>

<!--<deny users="?"/>-->

<deny users="?"/>

</authorization>

<!--

The <customErrors> section enables configuration

of what to do if/when an unhandled error occurs

during the execution of a request. Specifically,

it enables developers to configure html error pages

to be displayed in place of a error stack trace.

<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">

<error statusCode="403" redirect="NoAccess.htm" />

<error statusCode="404" redirect="FileNotFound.htm" />

</customErrors>

-->

<httpHandlers>

<remove verb="*" path="*.asmx"/>

<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>

</httpHandlers>

<roleManager enabled="true" defaultProvider="SqlRoleManager">

<providers>

<clear/>

<add name="SqlRoleManager" type="System.Web.Security.SqlRoleProvider" connectionStringName="SqlRoleManagerConnection" applicationName="HRSM2007"/>

</providers>

</roleManager>

<httpModules>

<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

</httpModules>

</system.web>

<system.codedom>

<compilers>

<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

<providerOption name="CompilerVersion" value="v3.5"/>

<providerOption name="OptionInfer" value="true"/>

<providerOption name="WarnAsError" value="false"/>

</compiler>

</compilers>

</system.codedom>

<!--

The system.webServer section is required for running ASP.NET AJAX under Internet

Information Services 7.0. It is not necessary for previous version of IIS.

-->

<system.webServer>

<validation validateIntegratedModeConfiguration="false"/>

<modules>

<remove name="ScriptModule"/>

<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

</modules>

<handlers>

<remove name="WebServiceHandlerFactory-Integrated"/>

<remove name="ScriptHandlerFactory"/>

<remove name="ScriptHandlerFactoryAppServices"/>

<remove name="ScriptResource"/>

<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

</handlers>

</system.webServer>

<runtime>

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

<dependentAssembly>

<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>

<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>

</dependentAssembly>

<dependentAssembly>

<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>

<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>

</dependentAssembly>

</assemblyBinding>

</runtime>

</configuration>

 

ajj3085 replied on Tuesday, December 23, 2008

Hmm...

My only other suggestion is to check configuration in IIS.  You'll need to make sure to disable Anonymous access in the Directory Security tab.  If you allow anon, IE never attempts to authenticate (why should it?) and you get an access denied.

Lyndon replied on Friday, December 26, 2008

thanks- checked that- and it made no difference.

I have since got Rocky's latest book VS2008. I am trying to code the objects mirroring his examples.

Copyright (c) Marimer LLC