我如何在Iis 8.0的等待过程中获得并发?

时间:2014-09-25 21:51:27

标签: c# wcf iis concurrency

我正在研究一个在IIS 8.0中托管的wcf服务,该服务看起来像:

接口:

namespace MCDWebService
{
[ServiceContract]
public interface IMCDService
{
    [OperationContract]
    Respuesta CapturarHuellas(string serialDispositivo);

}

[DataContract]
public class Respuesta
{
    [DataMember]
    public string Codigo { get; set; }

    [DataMember]
    public Parametro Parametros { get; set; }

    [DataMember]
    public string Mensaje { get; set; }

    public Respuesta(string codigo, Parametro datos)
    {
        Codigo = codigo;
        Parametros = datos;
    }

    public Respuesta(string codigo, string mensaje)
    {
        Codigo = codigo;
        Mensaje = mensaje;
    }

}
}

这个想法是“CapturarHuellas”方法将asyc连接到套接字服务器并等待响应事件,它看起来像这样:

namespace MCDWebService
{
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall ) ]
public class MCDService : IMCDService
{
    private SolicitudMCD solicitudMCD;
    private System.Threading.EventWaitHandle eventoSocket;
    private Respuesta respuesta;


    public Respuesta CapturarHuellas(string serialDispositivo)
    {
        try
        {
            eventoSocket = new System.Threading.EventWaitHandle(true, System.Threading.EventResetMode.AutoReset);
            solicitudMCD = new SolicitudMCD(IPAddress.Parse(ConfigurationManager.AppSettings.Get("IP_MCD")),
                int.Parse(ConfigurationManager.AppSettings.Get("Puerto_MCD")), serialDispositivo);
            solicitudMCD.Mensaje += solicitudMCD_Mensaje;

            eventoSocket.Reset();

            solicitudMCD.Solicitar();

            if (eventoSocket.WaitOne(50000)) // here wait the average waiting time is 10 seconds
            {
                return respuesta;
            }
            else
            {
                return new Respuesta("MCD_003_010", "Se alcanzó el tiempo máximo de respuesta del MCD.");
            }
        }
        catch (Exception ex)
        {
            return new Respuesta("MCD_003_000", ex.Message);
        }
        finally
        {
            eventoSocket.Dispose();
            solicitudMCD = null;
        }
    }

    void solicitudMCD_Mensaje(object sender, MensajeEventArgs e)
    {
        respuesta = new Respuesta(e.Codigo, e.Template);
        eventoSocket.Set();
    }
}
}

当我在localhost上使用此服务并且客户端也在localhost中时,它具有100%已回答请求的并发性,但是当我将服务带到具有相同硬件的新计算机时,并发效率降至19%已应答请求。 我不知道它是否是iis中的服务或配置。

由于 Drugdu

1 个答案:

答案 0 :(得分:0)

问题不在客户端的服务器中,您必须在app.config中添加以下代码

<system.net>
   <connectionManagement>
      <clear/>
        <add address="*" maxconnection="1000" />
   </connectionManagement>
</system.net>