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