2014-09-25 47 views
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

回答

0

這個問題是不是在服務器爲客戶端,您必須在App.config中添加以下代碼

<system.net> 
    <connectionManagement> 
     <clear/> 
     <add address="*" maxconnection="1000" /> 
    </connectionManagement> 
</system.net> 
相關問題