Аутентификация перед созданием элемента базы данных
Привет у меня есть эта проблема с некоторой аутентификацией и созданием элемента базы данных. В документации сказано, что аутентификацию следует вызывать перед созданием. Итак, вот код, который я сделал, и мне интересно, если у меня есть события в неправильном порядке.
private void ApplicationBarIconButton_Click_5(object sender, EventArgs e)
{
Gateway.AuthenticateAsync("username", "password1", "username2", "password2");
Gateway.AuthenticateCompleted += new EventHandler<ServiceReference.AuthenticateCompletedEventArgs>(AuthenticateTime);
}
private DateTime _nestedDateStart;
private DateTime _nestedDateEnd;
private DateTime _nestedDateStartBreak1;
private DateTime _nestedDateEndBreak1;
private DateTime _nestedDateStartBreak2;
private DateTime _nestedDateEndBreak2;
ServiceReference.TimereportDto Timereport = new ServiceReference.TimereportDto();
void AuthenticateTime(object sender, ServiceReference.AuthenticateCompletedEventArgs e)
{
Gateway.AuthenticateAsync("username1", "password1", "username2", "password2");
Timereport.Started = _nestedDateStart;
Timereport.Ended = _nestedDateEnd;
Timereport.Break1Start = _nestedDateStartBreak1;
Timereport.Break1End = _nestedDateEndBreak1;
Timereport.Break2Start = _nestedDateStartBreak2;
Timereport.Break2End = _nestedDateEndBreak2;
Timereport.Comment = Notes.Text;
Timereport.EmployeeSignature = "apptest";
Gateway.CreateTimereportAsync(Timereport,"ABD");
Gateway.CreateTimereportCompleted += new EventHandler<ServiceReference.CreateTimereportCompletedEventArgs>(CreateTimereportCompleted);
}
void CreateTimereportCompleted(object sender, ServiceReference.CreateTimereportCompletedEventArgs e)
{
}
Когда я устанавливаю точку останова на "CreateTimereportCompleted", я получаю ошибку, как показано ниже на рисунке:
Как вы можете видеть, он возвращает сообщение "Доступ запрещен, сначала войдите в систему". Так как имена пользователей и пароли верны, я считаю, что у меня должен быть код в неправильном порядке или что-то в этом роде.
ОБНОВИТЬ
Шлюз - это сервисная ссылка, которая выглядит так:
ServiceReference.GatewaySoapClient Gateway = new ServiceReference.GatewaySoapClient();
И если файл cookie аутентификации должен быть передан на следующий вызов службы, я не знаю. Ничто не говорит об этом в документации.
Они имеют в документации под Аутентификацией CookieContainer, но разве только тогда, когда вы делаете это для веб-обозревателя?
Кто-нибудь, кто может мне помочь?
1 ответ
Способ 1:- (без принудительной передачи файлов cookie через код)
В веб-конфигурации ASMX добавьте aspNetCompatibilityEnabled="true" и установите AllowCookies=false
В вашем ServiceReferences.ClientConfig добавьте AllowCookieContainer=true
Способ 2:- (Передача куки через код)
В веб-конфигурации ASMX установите AllowCookies=true. В ServiceReferences.ClientConfig добавьте AllowCookieContainer=true, и вы можете установить
client.CookieContainer = yourCookieContainerVariable
и передайте эту переменную yourCookieContainer для следующего вызова службы.
Этот метод особенно полезен, когда у вас есть отдельный URL для вашей аутентификации и других бизнес-функций
Как показано на: http://www.kotancode.com/2010/08/06/aspnet-authentication-wp7/