0
I'm工作的一個WCF服務在IIS 8.0託管服務的樣子:我如何在等待進程中發生衝突wcf在Iss 8.0上?
接口:
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();
}
}
}
當我使用本地主機上的這個服務和客戶端也在本地主機它的100%併發回答請求,但是當我拿服務一個新的馬赫使用相同的硬件,併發效率下降到19%的應答請求。 我不知道它是否是iis中的服務或配置。
感謝 Drugdu