我在部署到我的IIS 7 Production Web服务器时会遇到确保工作的问题。我正在使用内存身份验证,当我从Visual Studio本地运行时,一切正常。但是,当我尝试连接到生产Web服务器时,从使用ServicEstack客户端的WPF应用程序连接时,我会遇到不同的错误,包括:
- "找不到"
- "未经授权"
- " {"长度不能小于零。参数名称:长度"}"
我在IIS中尝试了多种身份验证的配置,包括启用/禁用表单身份验证,Windows身份验证和基本身份验证,无用。
- 我有时可以使用codeinchaos.com rest客户端连接。
- 密码和用户名绝对正确。
global.asax
:
public override void Configure(Funq.Container container)
{
RegisterPlugins();
RegisterValidators(container);
RegisterCaches(container);
RegisterSessionFactories(container);
RegisterRepositories(container);
RegisterUsers(container);
}
private void RegisterPlugins()
{
Plugins.Add(new AuthFeature(() => new AuthUserSession(),new IAuthProvider[] { new BasicAuthProvider()}));
}
private void RegisterUsers(Funq.Container container)
{
var userRepository = new InMemoryAuthRepository();
container.Register<IUserAuthRepository>(userRepository);
string hash;
string salt;
new SaltedHash().GetHashAndSaltString("xxxxxxxx", out hash, out salt);
userRepository.CreateUserAuth(new UserAuth
{
Id = 1,
DisplayName = "xxx xxxxxx",
Email = "xxxx@xxxxx.com",
UserName = ""xxxxxxxx,
FirstName = "xxxx",
LastName = "xxxx",
PasswordHash = hash,
Salt = salt,
Roles = new List<string> { RoleNames.Admin },
}, "xxxxxxxx");
}
我的客户:
public UserEntity GetUserFromDomainUsername(string domainUsername)
{
try
{
using (var client = new StormJsonServiceClient(WebServiceUrl){UserName = "xxxxxxx", Password = "xxxxxxxx"})
{
var response = client.Send(new UserFromDomainUsernameQuery { DomainUsername = domainUsername });
return response.User;
}
}
catch (Exception exception)
{
var ex = exception as WebServiceException;
if (ex != null)
{
throw new VqsWebServiceException(GetWebServiceErrorMessage(ex));
}
throw;
}
}
iis身份验证与ServiceStack身份验证无关,如果您不需要它,请将其关闭。
如果您启用了IIS身份验证,则它将在ServiceStack应用程序的顶部有效运行。因此,它将在所有请求对您的ServiceStack服务之前运行,您最终必须首先满足此安全标准。如果通过此请求,则将转到ServiceStack应用程序。
大多数在ServiceStack中实施身份验证的人都不需要IIS也实现身份验证。