Я использую ASP.Net compact версии 3.5 SPI
Я запускаю приложение на ручном сканере, который регулярно называет веб-методы.
Я установил время проверки подлинности форм до 60 в веб-конфигурации
<authentication mode="Forms">
<forms name="Auth" loginUrl="service1.asmx" protection="All" timeout="60" path="/" slidingExpiration="true" />
</authentication>
<p>
Тайм-аут подсчитывается, и пользователь возвращается к логину, когда аутентификация истекает в приложении. Однако, если я вызываю веб-метод, тайм-аут не сбрасывается вообще. и если время входа в систему не выполняется, пользователь не возвращается на экран входа в систему.
Это пример одного из методов Интернета, которые я вызываю. Я бы предпочел не добавлять код для каждого веб-метода, чтобы выполнить сброс тайм-аута, но будет делать, если мне нужно.
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class STAWMS_WebService : WebService
{
private DataTable myCommonTable = new DataTable("Common");
private DataTable myReturnData = new DataTable("ReturnData");
private DataSet myReturnDataSet = new DataSet();
private string SessionID = HttpContext.Current.Session.SessionID;
private string query;
private int UserPK;
private ArrayList myparams = new ArrayList();
private DataSet myTempDataSet = new DataSet();
private int ReturnIntegerTable;
private int ReturnBooleanTable;
[WebMethod(EnableSession = true)]
public DataSet GetBuildUnitDetails(int StockInPK, int UserInPK)
{
try
{
if (Context.User.Identity.IsAuthenticated)
{
myparams.Clear();
myparams.Add(new STASqlParameter("@StockInPK", StockInPK));
myReturnData = STADatabase.SQLStoredProcedureSelect("GetStockInfo", myparams).Tables[0];
myReturnData.TableName = "STA2";
myReturnDataSet.Tables.Add(myReturnData.Copy());
PopulateMyCommonTable(true, SessionID, true, UserInPK);
}
return myReturnDataSet;
}
catch (Exception)
{
PopulateMyCommonTable(false, SessionID, false, UserInPK);
return myReturnDataSet;
}
}
}
</pre>
В качестве обходного пути вы можете приступить к следующему:
Если ваш Context.User.Identity.IsAuthenticated
false
верните myReturnDataSet
как null
. Таким образом, вы можете проверить карманный компьютер, если он равен null, просто перенаправляя страницу входа.
try
{
if (Context.User.Identity.IsAuthenticated)
{
...
return myReturnDataSet;
}
else
{
return null;//Here it will sign you is not authenticated.
}
}
catch (Exception)
{
...
return myReturnDataSet;
}
Другое дело, я не знаю, как все работает в портативной версии Framework, но loginUrl="service1.asmx"
указывает на вашу страницу входа.