Вот как настроена моя система:
- Веб-сервис, использующий веб-сервис ASP.Net
- Веб-сервис имеет веб-метод с EnableSession = true
- Клиент, который ссылается на веб-службу с помощью «Ссылок на службу» (примечание: не «Веб-ссылки»)
- В app.config клиента есть allowCookies = true
На стороне клиента у меня есть следующий код для загрузки файла в службу
bool res = service.InitiateUpload();
if (res) {
do {
read = stream.Read(buffer, 0, BLOCK_SIZE);
if (read == BLOCK_SIZE)
res = res && service.AppendUpload(buffer);
else if (read > 0)
// other call to AppendUpload, after buffer manipulation
На стороне сервера у меня есть код, который проверяет, совпадает ли идентификатор сеанса из вызова InitiateUpload сAppendUpload.
[WebMethod(EnableSession=true)]
public bool InitiateUpload() {
lock (theLock) {
if (IsImportGoingOn)
return false;
theImportDataState = new ImportDataState(Session.SessionID);
}
return true;
}
[WebMethod(EnableSession=true)]
public bool AppendUpload(byte[] data) {
lock (theLock) {
if (!IsImportGoingOn)
return false;
if (theImportDataState.session != Session.SessionID)
return false;
theImportDataState.buffer.AddRange(data);
return true;
}
}
Вызов AppendUpload возвращает значение false из-за несовпадения идентификаторов сеанса.Это почему?Насколько я вижу, у меня есть правильные атрибуты для веб-метода, клиент имеет правильную конфигурацию, и используется тот же экземпляр прокси.Я что-то упустил?