Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF数据服务更新返回401-未经授权:由于凭据无效,访问被拒绝_C#_Wcf_Service - Fatal编程技术网

C# WCF数据服务更新返回401-未经授权:由于凭据无效,访问被拒绝

C# WCF数据服务更新返回401-未经授权:由于凭据无效,访问被拒绝,c#,wcf,service,C#,Wcf,Service,我有一个WCF数据服务,我正在尝试在DataServiceContext客户端上使用UpdateObject方法。调用SaveChanges方法时,会出现以下错误页面: 未经授权:由于凭据无效,访问被拒绝 您没有使用您提供的凭据查看此目录或页面的权限 有人知道我该如何解决这个问题吗?我发现,这在理论上可以解决问题,但对于生产服务来说,设置此磁盘访问不是一个现实的解决方案。请记住,在本地机器上运行此WCF数据服务时,它工作正常。我的电话的C#代码如下: public overrid

我有一个WCF数据服务,我正在尝试在DataServiceContext客户端上使用UpdateObject方法。调用SaveChanges方法时,会出现以下错误页面:

未经授权:由于凭据无效,访问被拒绝
您没有使用您提供的凭据查看此目录或页面的权限

有人知道我该如何解决这个问题吗?我发现,这在理论上可以解决问题,但对于生产服务来说,设置此磁盘访问不是一个现实的解决方案。请记住,在本地机器上运行此WCF数据服务时,它工作正常。我的电话的C#代码如下:

        public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection)
    {
        var userName = ( string ) context[ "UserName" ];
        var isAuthenticated = ( bool ) context[ "IsAuthenticated" ];
        if (userName != null && userName.Length >= 1 && collection.Count >= 1)
        {
            var allNames = string.Empty;
            var allValues = string.Empty;
            byte[] buf = null;
            PrepareDataForSaving( ref allNames, ref allValues, ref buf, true, collection, isAuthenticated );
            if (allNames.Length != 0)
            {
                var client = GetDataContext( );
                var profile = client.ProfileViews.Where(p => p.UserName == userName).FirstOrDefault();
                if (profile == null)
                {
                   profile = new ProfileView() { UserName = userName };
                    client.AddToProfileViews(profile);
                }
                profile.PropertyNames = allNames;
                profile.PropertyValuesString = allValues;
                profile.PropertyValuesBinary = buf;
                profile.LastUpdateDate = DateTime.UtcNow;


                client.UpdateObject(profile);
                client.SaveChanges( );
            }
        }
    }

我对使用WCF数据服务的Silverlight应用程序也有类似的问题。用户可以查看应用程序中的数据——从数据库中选择的数据正在运行——但他们收到的是相同的“401-未经授权:拒绝访问无效凭据”。您描述的是他们何时尝试保存对数据库的更改(即,在代码中执行SaveChanges时)。根本问题最终是IIS应用程序文件夹本身的权限问题。要修复此问题,我们必须授予WCF服务正在使用的应用程序池对该文件夹的写入权限

  • 转到IIS,右键单击包含WCF服务的虚拟目录,然后选择管理应用程序->高级设置。。。。记下应用程序池名称

  • 在同一右键单击菜单中,选择“编辑权限…”。。。。。在“安全”选项卡上,选中组和用户名

  • 如果缺少应用程序池的名称。使用名称格式“IIS APPPOOL\MyApplicationPoolName”添加它。请参阅此有用的链接:

  • 确保MyApplicationPoolName具有写入权限(我们实际上授予了它完全控制权)


  • 在我的例子中,我在IIS 7.5上托管的WCF数据服务上使用kerberos(useAppPoolCredentials=true)进行了模拟Windows身份验证。奇怪的是,我可以成功地选择和插入数据,但当我尝试更新时,我得到了一个401.3拒绝访问错误。解决方案是为web配置(myRole)中指定的AD组提供:

    
    
    对应用程序文件夹的读写访问权限,如Dan Sabin所说。错误消息是:


    错误消息401.3:您没有使用您提供的凭据查看此目录或页面的权限(由于访问控制列表,访问被拒绝)。请Web服务器管理员为您提供访问权限

    只是一个备注-确保您单击“位置”并勾选机器名。如果您不这样做,它将找不到IIS APPPOOL'AppPoolName'用户。我花了很长时间才弄明白这一点:D.谢谢!
    <authorization>
      <allow roles="myRole"/>  
      <deny users="*" />
    </authorization>