开发了一个Windows服务并在32位计算机上运行。它与Project Web Access Web服务进行通信。现在,该服务已移至与Project Web Access Web服务相同的计算机上。代码失败,我收到了这个错误:
System.Net.WebException:The 请求失败,HTTP状态为401: 未经授权。在 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage 消息,WebResponse响应,流 responseStream,Boolean asyncCall)
在 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(字符串 methodName,Object [] parameters)at ProjToolService.ProjectWebSvc.Project.ReadProject(GUID projectUid,DataStoreEnum dataStore)
在 ProjToolService.Queue.AssignResource(GUID queueId,Guid projectId,Guid taskId, Guid resourceId,Guid assignmentId)
它可能不是32位对64位,但我没有其他想法。
目标平台是x86,但使用AnyCPU也失败了。我也尝试使用DefaultCredentials
和System.net.CredentialCache.DefaultNetworkCredential
。
答案 0 :(得分:3)
401是HTTP状态,因此它与32位与64位无关。我会检查并确保使用正确的信任设置Web服务(特别是如果您计划使用匿名访问)。
如果我没记错,DefaultNetworkCredential会拉动运行该服务的帐户,因此我会检查以确保您使用的服务帐户具有访问该网络服务的相应权限。检查此问题的简便方法是让帐户运行对计算机的服务管理访问权限(然后在完成后将其取走)。如果它工作,那么这是一个权限问题。如果没有,那么你知道它是另一回事。
要将帐户权限转到“管理工具” - >计算机管理 - >本地用户和组 - >组。将网络用户添加到适当的组(就像我说我会从管理员开始并向下工作。)
答案 1 :(得分:0)
您的服务运行的用户是什么?请记住,当未登录时,本地用户等不会运行,而服务器通常不会。网络用户可能会工作。
答案 2 :(得分:0)
Win2003上的安全设置比WinXP更安全,特别是在网络访问方面。您可以更好地查看Web服务和系统日志中的“拒绝访问”错误,并确保您的服务(具有其确切名称,最多为URL中的?
)可以访问服务请求。 / p>
答案 3 :(得分:0)
感谢所有帮助&注意但我终于发现了这个问题。问题是使用Web服务在本地运行的win服务的问题。此问题特定于Windows Server 2003操作系统。解决问题我必须在名为DisableLoopbackCheck的注册表编辑器中创建一个新值,并将其设置为1.