Web Service权限问题

梅青松 2005-06-21 10:51:19
我在Web Service中使用了微软的Data Access Application Block组件访问数据库,
但是在部署后本机调用(通过http://localhost/webservice.asmx调用)时出现异常
System.Security.SecurityException: 不允许所请求的注册表访问权。

我看了Data Access Application Block的源码,
其中有写log的操作(其中有对注册表的操作),
EventLog eventlog = new EventLog(SR.LogName, SR.MachineName, SR.FailureLogSource);
eventlog.WriteEntry(message, EventLogger.FailureLogType);

Data Access Application Block的AssemblyInfo.cs有设置注册表访问权限
[assembly : RegistryPermission(SecurityAction.RequestMinimum)]

我将ASP.NET用户设为administrator,还是没有用

--异常:
System.TypeInitializationException: “Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataCommandFailedEvent”的类型初始值设定项引发异常。 ---> System.Security.SecurityException: 不允许所请求的注册表访问权。
at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable)
at System.Diagnostics.EventLog.CreateEventSource(String source, String logName, String machineName, Boolean useMutex)
at System.Diagnostics.EventLog.CreateEventSource(String source, String logName, String machineName)
at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.PerformanceCounterInstances.ReportCounterFailure(String message)
at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.PerformanceCounterInstances..ctor(String categoryName, String counterName, Boolean createNewInstance)
at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.InstrumentedEvent.AddPerformanceCounter(String category, String[] counterNames, Boolean createNewInstance)
at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.InstrumentedEvent.Initialize(String counterCategory, String[] counterNames, Boolean createNewInstance, String eventLogSource, EventLogIdentifier[] eventIds)
at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.InstrumentedEvent..ctor(String counterCategory, String[] counterNames, Boolean createNewInstance)
at Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataServiceEvent..ctor(String[] counterNames)
at Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataCommandFailedEvent..ctor(String[] counterNames)
at Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataCommandFailedEvent..cctor()
--- 内部异常堆栈跟踪的结尾 ---
at Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataCommandFailedEvent.Fire(String commandText, String connectionString)
at Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataInstrumentationFacade.CommandFailed(String commandText, String connectionString)
at Microsoft.Practices.EnterpriseLibrary.Data.Database.DoLoadDataSet(DBCommandWrapper command, DataSet dataSet, String[] tableNames)
at Microsoft.Practices.EnterpriseLibrary.Data.Database.LoadDataSet(DBCommandWrapper command, DataSet dataSet, String[] tableNames)
at Microsoft.Practices.EnterpriseLibrary.Data.Database.LoadDataSet(DBCommandWrapper command, DataSet dataSet, String tableName)
at Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteDataSet(DBCommandWrapper command)
at BMSServer.AuthService.GetAuthorizationTicket(String userName, String password, String power)

...全文
405 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lemong 2005-06-21
  • 打赏
  • 举报
回复
这台出问题的机器环境和正常的机器有什么不同吗?
梅青松 2005-06-21
  • 打赏
  • 举报
回复
我对系统日志操作的权限赋给asp.net用户后,
还是没有效果,仍然出现这个异常

ps
我开发的机器和一台测试的机器(都装有visual stdio),
没有对系统日志操作的权限赋给asp.net用户,也没有这个问题,
Tomgus 2005-06-21
  • 打赏
  • 举报
回复
因为系统日志的操作是有权限控制的,所以我们还要把对系统日志操作的权限赋给asp.net用户,方法如下:“开始->运行”,输入命令,“regedt32”,找到“System->CurrentControlSet->Services->Eventlog”,选择“安全->权限->添加”,然后找到本机的“AspNet”用户,加进来并且给读取权限就好了,加进来后目录中会多一个“aspnet_wp account”
Tomgus 2005-06-21
  • 打赏
  • 举报
回复
看了思归的回答

It seems that the App Block configures a registry key named "Enterprise Library Logging Service" by default, and then attempts to use one called "Enterprise Library Logging" in the configuration file. Renaming one or the other fixed the problem for me.
saucer 2005-06-21
  • 打赏
  • 举报
回复
you have "CommandFailed", something is wrong with your database operations, try to run EnterpriseLibrary's install services

see the replies in

http://blog.hishambaz.com/archive/2005/01/29/194.aspx
梅青松 2005-06-21
  • 打赏
  • 举报
回复
问题终于解决了,
但是具体原因不太清楚,
不知道是不是IIS有问题。


----解决方案
我使用Web共享发布Web Service就没有问题了,
原先的安装程序将Web Service放在C:\intpub\wwwroot下。

PS:
可以肯定的是,问题并不是出在一楼所说的地方,
因为我将系统日志的ASPNET用户删除后,仍然可以在Web
Service中操作EventLog.

梅青松 2005-06-21
  • 打赏
  • 举报
回复
up
梅青松 2005-06-21
  • 打赏
  • 举报
回复
没有什么不同啊,
我试了四台机器,
两台可以,两台不行。
可以的两台也没有设置什么权限

12,163

社区成员

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

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