我使用WCF创建了一个服务来保存系统的日志历史记录。我的想法是异步调用此服务,如果日志服务处于脱机状态,主系统无需等待返回。
我在我的方法中添加了参数isOneWay,如下所示:
[OperationContract(IsOneWay=true)]
void Gravar(AuditoriaDTO objeto);
我的服务非常简单,只需将对象保存在数据库中:
internal void Gravar(AuditoriaDTO objeto)
{
try
{
StringBuilder strSql = new StringBuilder();
strSql.Append("INSERT INTO ACECPGER_LOG.AUDITORIA");
strSql.Append(" (COD_SISTEMA");
strSql.Append(" ,COD_MODULO");
strSql.Append(" ,COD_PROJETO");
strSql.Append(" ,DSC_CLASSE");
strSql.Append(" ,DSC_METODO");
strSql.Append(" ,COD_RESULTADO");
strSql.Append(" ,DSC_RESULTADO");
strSql.Append(" ,DSC_STACKTRACE");
strSql.Append(" ,DTH_INICIO");
strSql.Append(" ,DTH_FIM");
strSql.Append(" ,DSC_USUARIO)");
strSql.Append(" VALUES");
strSql.Append(" (:COD_SISTEMA");
strSql.Append(" ,:COD_MODULO");
strSql.Append(" ,:COD_PROJETO");
strSql.Append(" ,:DSC_CLASSE");
strSql.Append(" ,:DSC_METODO");
strSql.Append(" ,:COD_RESULTADO");
strSql.Append(" ,:DSC_RESULTADO");
strSql.Append(" ,:DSC_STACKTRACE");
strSql.Append(" ,:DTH_INICIO");
strSql.Append(" ,:DTH_FIM");
strSql.Append(" ,:DSC_USUARIO)");
using (AcessoDadosOracle acessoDados = new AcessoDadosOracle())
{
acessoDados.AdicionarParametro(":COD_SISTEMA", objeto.Sistema.Codigo);
acessoDados.AdicionarParametro(":COD_MODULO", objeto.Modulo.Codigo);
acessoDados.AdicionarParametro(":COD_PROJETO", objeto.Projeto.Codigo);
acessoDados.AdicionarParametro(":DSC_CLASSE", objeto.Classe);
acessoDados.AdicionarParametro(":DSC_METODO", objeto.Metodo);
acessoDados.AdicionarParametro(":COD_RESULTADO", objeto.CdResultado);
acessoDados.AdicionarParametro(":DSC_RESULTADO", objeto.Resultado);
acessoDados.AdicionarParametro(":DSC_STACKTRACE", objeto.StackTrace);
acessoDados.AdicionarParametro(":DTH_INICIO", objeto.DataInicio);
acessoDados.AdicionarParametro(":DTH_FIM", objeto.DataFim);
acessoDados.AdicionarParametro(":DSC_USUARIO", objeto.Usuario);
acessoDados.ExecuteNonQuery(strSql.ToString());
}
}
catch (Exception ex)
{
throw ex;
}
}
在通话中,我会执行以下操作:
using (AuditoriaService.AuditoriaClient servico = new AuditoriaService.AuditoriaClient())
{
try
{
servico.GravarAsync(objeto);
}
catch (Exception ex)
{
throw ex;
}
}
在我的测试期间,我在服务中添加了断点,应用程序等待几秒钟以继续其他操作。我需要应用程序不要等待1秒钟才能返回服务。这可能吗?你应该怎么做?
我的服务参考配置如下: