在IIS上尝试我的WCF数据服务时得到“401 - 未经授权”

时间:2011-08-18 06:05:12

标签: c# .net wcf iis wcf-data-services

我开发了一个运行良好的WCF数据服务,我可以完成我想要的所有操作。

我开发了一个小型的c#客户端来测试所有功能:添加,删除,修改,检索数据。

我的visual studio服务器上的一切正常,但是一旦我在IIS服务器上:

  • 我可以添加/检索数据
  • 我无法编辑数据

当我尝试编辑数据时,我收到此错误:

  

System.Data.Services.Client.DataServiceRequestException未处理
  消息= Une erreur s'est produite lors du traitement de cette   requête。
  来源= System.Data.Services.Client
  堆栈跟踪:
  àSystem.Data.Services.Client.DataServiceContext.SaveResult.HandleBatchResponse()
  àSystem.Data.Services.Client.DataServiceContext.SaveResult.EndRequest()
  àSystem.Data.Services.Client.DataServiceContext.SaveChanges(SaveChangesOptions   选项)
  àSystem.Data.Services.Client.DataServiceContext.SaveChanges()
  àWSTester.Program.ModifySomeThings(实体实体)dans   d:\工作区\ 10067.GfK
  Telecontrol.TOM \ Release \ V3.1 \ WSTester \ Program.cs:ligne 90
  àWSTester.Program.Main(String [] args)dans   d:\工作区\ 10067.GfK   Telecontrol.TOM \ Release \ V3.1 \ WSTester \ Program.cs:ligne 23
  àSystem.AppDomain._nExecuteAssembly(RuntimeAssembly   assembly,String [] args)
  àSystem.AppDomain.ExecuteAssembly(String assemblyFile,   证据assemblySecurity,String [] args)
  àMicrosoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
  àSystem.Threading.ThreadHelper.ThreadStart_Context(Object   状态)
  àSystem.Threading.ExecutionContext.Run(ExecutionContext   executionContext,ContextCallback回调,对象状态,布尔值   ignoreSyncCtx)
  àSystem.Threading.ExecutionContext.Run(ExecutionContext   executionContext,ContextCallback回调,对象状态)
  àSystem.Threading.ThreadHelper.ThreadStart()
  的InnerException:
  System.Data.Services.Client.DataServiceClientException
  消息=   严格// EN“”http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  
  
      
      401 - 未经授权:由于无效而拒绝访问   凭据。
      
            

。内容容器{背景:#FFF;宽度:96%;边距:8像素;填充:10px的;位置:相对;}        - >
      
      
      
      

服务器错误


      
       
        

401 - 未经授权:由于无效,访问被拒绝   凭证。


        

您无权查看此目录或页面   使用您提供的凭据。


       
      
      
        

     

源= System.Data.Services.Client
  的StatusCode = 401
  堆栈跟踪:
  àSystem.Data.Services.Client.DataServiceContext.SaveResult.d__1e.MoveNext()
  InnerException:

这很奇怪,因为我在WCF数据服务中拥有所有权利(并且它适用于visual studio),而且我在IIS中处于匿名模式,所以我应该拥有运行此查询的所有权利。 IIS_USR对Web文件夹有完全控制,所以我真的看不出可能出现什么问题

3 个答案:

答案 0 :(得分:6)

我只是通过对WCF文件夹的“IUSR”帐户进行“完全控制”来修复我的问题。这就是我做的所有工作。

答案 1 :(得分:2)

尝试将应用池的模拟功能用于具有权限的用户。我过去使用IIS 7的默认AppPoolIdentity功能遇到了很多问题,并且通常将其分配给用户设置用于此目的或将其设置为使用网络服务。

池很可能没有正确执行的权限。

答案 2 :(得分:2)

我让它与自定义用户一起运行,现在它可以运行,所以如果您遇到此问题,可以在IIS服务器上尝试以下操作:

  1. 创建一个Windows用户;
  2. 在WCF数据服务文件夹中赋予它读/写/修改/执行/ ...权限;
  3. 使用.NET 4,集成模式和此用户创建新的应用程序池;
  4. 在网站身份验证中,仅启用匿名模式,并将用户设置为“应用程序池标识”。