使用机器名可以正常访问,但使用IP地址就不行了!

犀山居士 2007-06-22 07:22:23
奇怪了,使用机器名可以正常访问,但使用IP地址就不行了!
在Web项目中,用到了InfoPath,用了Microsoft SharePoint,ASP.NET的State Menagement中,Session state mode使用是SQLServer
使用机器名可以正常访问,但是使用IP地址就出现以下错误信息

Server Error in '/' Application.
--------------------------------------------------------------------------------

Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[NullReferenceException: Object reference not set to an instance of an object.]
Microsoft.Office.Server.Administration.SqlSessionStateResolver.System.Web.IPartitionResolver.ResolvePartition(Object key) +77
System.Web.PartitionManager.GetPartition(IPartitionResolver partitionResolver, String id) +244
System.Web.SessionState.SqlSessionStateStore.GetConnection(String id, Boolean& usePooling) +52
System.Web.SessionState.SqlSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) +178
System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) +355
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +92
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +64




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.42; ASP.NET Version:2.0.50727.42

请高手给予指点啊!谢谢了!
...全文
2784 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
随风 2010-03-30
  • 打赏
  • 举报
回复
会话状态模式

ASP.NET 会话状态支持若干用于会话数据的存储选项。每个选项都由 SessionStateMode 枚举中的一个值标识。下面的列表描述了可用的会话状态模式:

* InProc 模式,此模式将会话状态存储在 Web 服务器上的内存中。这是默认设置。
* StateServer 模式,此模式将会话状态存储在一个名为 ASP.NET 状态服务的单独进程中。这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。
* SQLServer 模式将会话状态存储到一个 SQL Server 数据库中。这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。
* Custom 模式,此模式允许您指定自定义存储提供程序。
* Off 模式,此模式禁用会话状态。

web.config
system.web节点下加入
<sessionState mode="InProc" timeout="120" partitionResolverType=""/>

参考文章:
http://www.michadel.net/post/e5a682e4bd95e59ca8-Sharepoint-e7b6b2e7ab99e4b88ae58aa0e585a5e887aae8a18ce9968be799bce79a84-net-web-e68789e794a8e7a88be5bc8f.aspx
犀山居士 2008-02-28
  • 打赏
  • 举报
回复
谢谢各位,不知道是什么原因,配置的其它机器又可以使用IP和机器名,郁闷中。。。
Miamiiii 2007-08-20
  • 打赏
  • 举报
回复
学习
犀山居士 2007-08-16
  • 打赏
  • 举报
回复
谢谢hengwang007(★★★★★)
1,不知道你说的那些操作是在哪个操作系统下的?我的是Win2003,“所有任务”下没有“权限向导”,只有“将配置保存到一个文件”。。。
2,我们为了这个问题,早已将防火墙关闭了,防火墙已经关掉了,还需要“2.防火墙->高级-->本地连接-->设置-->web服务器(http),打勾。”吗?,而且你所指的“Web服务器(HTTP)”和“Web服务器(Http)”都已经打上钩的。
谢谢jackjoy(龙腾四海),wht6411(weblover|已经毕业)
明天我去试一下
犀山居士 2007-08-09
  • 打赏
  • 举报
回复
谢谢jackjoy(龙腾四海) !
不知道你说的etc\hosts文件在哪里?如何修改?我在机器上找不到,请前辈指点指点,谢谢了
jackjoy 2007-08-09
  • 打赏
  • 举报
回复
c:\WINDOWS\system32\drivers\etc\hosts
vfan2010 2007-08-09
  • 打赏
  • 举报
回复
楼主要修复hosts文件,可以下载360安全卫士来修复 。
F15Eagle 2007-08-09
  • 打赏
  • 举报
回复
楼主,按下面的做法试试
1.打开IIS,找到文件目录,右键->所有任务->权限向导->下一步....都点Yes;
2.防火墙->高级-->本地连接-->设置-->web服务器(http),打勾。
jackjoy 2007-08-08
  • 打赏
  • 举报
回复
SharePoint网站可以在外网访问,通过备用访问映射就可以做到。
如果能PING通IP却PING不通机器名,那就是DNS域名解析的问题,
可以通过修改etc\hosts文件解决。
犀山居士 2007-08-07
  • 打赏
  • 举报
回复
谢谢jackjoy(龙腾四海) !
如果不能使用IP访问,那么SharePoint网站就不能在外网访问了?因为在路由器里要设置转发
还有另一个问题,我的机器现在能Ping得通IP,却Ping不能机器名?
jackjoy 2007-08-03
  • 打赏
  • 举报
回复
如果是SharePoint网站,默认只能使用机器名访问,不能使用IP地址或者localhost这样的东东
访问(一直没搞清楚Sharepoint在哪动的手脚),可以通过添加新的“备用访问映射”来
使用IP地址访问(在SharePoint管理中心)。
Jinglecat 2007-07-28
  • 打赏
  • 举报
回复
不会
犀山居士 2007-07-28
  • 打赏
  • 举报
回复
为什么我能Ping得通IP,却Ping不能机器名?请问是什么原因?我对照了别人机器上的服务,别人的可以访问,我的却不行,无论是Ping别人的机器,还是Ping我自己的机器都不行,郁闷啊!!!
请高手帮帮我!!!
wxlwxlwxlwxl 2007-07-24
  • 打赏
  • 举报
回复
关注.
犀山居士 2007-07-19
  • 打赏
  • 举报
回复
谢谢webhermit(杀人眨一眼)
1,不知道你说的那些操作是在哪个操作系统下的?我的是Win2003,“所有任务”下没有“权限向导”,只有“将配置保存到一个文件”。。。
2,我们为了这个问题,早已将防火墙关闭了,而且你所指的“Web服务器(HTTP)”和“Web服务器(Http)”都已经打上钩的。
3,网站属性中,“网站”选项卡下,网站标识部分,IP 地址栏的内容默认为“(全部未分配)”,这时只能使用机器名访问网站,不能用机器名与IP混合的方式访问,将这个改为本机在局域网的IP(192.168.1.x)后,就可以用IP访问,但这个问题以前没有出现过,以前都是默认的“(全部未分配)”就可以了,这次不知道为什么,在网站的日志中,所记录的访问用户,并不全是我们访问所使用的用户名,有些就为空(我使用集成身份验证或使用匿名登录都一样,有些记录用户为指定的用户,但有些却为空),现在是不知道这个问题是如何产生的?也就不知道如何解决了,从系统事件中看到的警告,也就是这个用户(用户为空的这个)没有权限,但我已经为网站目录Temp目录赋予Everyone用户所有操作权限都没有用!
webhermit 2007-07-18
  • 打赏
  • 举报
回复
如果可以使用机器名或者localhost可以访问,例如:http://localhost/...
想改为IP访问。
1.打开IIS,找到文件目录,右键->所有任务->权限向导->下一步....都点Yes;
2.防火墙->高级-->本地连接-->设置-->web服务器(http),打勾,即可!
Jinglecat 2007-07-14
  • 打赏
  • 举报
回复
mark
犀山居士 2007-06-27
  • 打赏
  • 举报
回复
谢谢楼上的,但看了你的还是不知道如何解决
我用VS建立一个Web Service项目后,在IIS里新建一个站点,并指定站点目录为这个项目的路径,为此目录添加了ASPNET的所有控制权限,网站属性中的目录安全性里选择的是“启用匿名访问”,并指定的用户为ASPNET用户,访问时出现如下错误提示:
===================
服务器应用程序不可用
您试图在此 Web 服务器上访问的 Web 应用程序当前不可用。请点击 Web 浏览器中的“刷新”按钮重试您的请求。

管理员注意事项: 详述此特定请求失败原因的错误信息可在 Web 服务器的系统事件日志中找到。请检查此日志项以查明导致该错误发生的原因。
===================
并在应用程序日志中有以下错误日志:
===================
事件类型: 警告
事件来源: ASP.NET 2.0.50727.0
事件种类: 无
事件 ID: 1073
日期: 2007-06-27
事件: 9:31:23
用户: N/A
计算机: SANYI01
描述:
未能初始化 AppDomain:/LM/W3SVC/336127389/Root

Exception: System.IO.FileLoadException
Message: 未能加载文件或程序集“System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。拒绝访问。
StackTrace: 在 System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
在 System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
在 System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
在 System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo, StackCrawlMark& stackMark)
在 System.Activator.CreateInstance(String assemblyName, String typeName)
在 System.AppDomain.CreateInstance(String assemblyName, String typeName)
在 System.AppDomain.CreateInstance(String assemblyName, String typeName)
在 System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)
在 System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)

有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
===================
事件类型: 错误
事件来源: ASP.NET 2.0.50727.0
事件种类: 无
事件 ID: 1088
日期: 2007-06-27
事件: 9:31:23
用户: N/A
计算机: SANYI01
描述:
Failed to execute request because the App-Domain could not be created. Error: 0x80070005 拒绝访问。

有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
===================

我再为此网站的目录添加Everyone用户的读取权限后,就可以正常访问,而从上面的日志中可以看出,它的用户为“N/A”,而并不是我指定的ASPNET用户!!看来问题是出在这里!就是没有用户权限!但我明明指定的是ASPNET用户啊!?怎么回事呢?这和上面的其它错误实际上都是同一个错误!在同一个请求中,有些用户为空,有些不为空,为空的那些请求,就没有权限访问,所以就失败了!以前做项目的时候就没有这个问题啊,指定匿名用户为ASPNET就可以访问了,但现在为什么就不行了呢?一定要指定Everyone用户?
Ivony 2007-06-27
  • 打赏
  • 举报
回复
推测错了,因为如果是对null调用方法,那么不会是调用的那个方法出现在调用堆栈顶端,而是执行调用方法的方法。所以这里的null不应该是IPartitionResolver,而极有可能是object key
Ivony 2007-06-27
  • 打赏
  • 举报
回复
既然是系统内部的方法出现异常,只能推断,呵呵……

看异常
异常是很常见的为将对象引用设置到对象实例,最常见的是对null实例调用方法。
所以推断Microsoft.Office.Server.Administration.SqlSessionStateResolver.System.Web.IPartitionResolver.ResolvePartition(Object key) +77

这里的IPartitionResolver为null

进而推断
System.Web.PartitionManager.GetPartition(IPartitionResolver partitionResolver, String id) +244
这里的partitionResolver为null


相关代码是:
this._partitionInfo = (SqlPartitionInfo) s_partitionManager.GetPartition(this._partitionResolver, id);

故_partitionResolver为null

_partitionResolver在这里初始化:
internal override void Initialize(string name, NameValueCollection config, IPartitionResolver partitionResolver)

因为是传进取的,继续追溯调用方:
在System.Web.SessionState.SessionStateModule.InitModuleFromConfig
这样调用:
this._partitionResolver = this.InitPartitionResolver(config);
((SqlSessionStateStore) this._store).Initialize(null, null, this._partitionResolver);

最终查得问题:
private IPartitionResolver InitPartitionResolver(SessionStateSection config)
{
string partitionResolverType = config.PartitionResolverType;
if (string.IsNullOrEmpty(partitionResolverType))
{
return null;
}

//...
加载更多回复(11)

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧