2009-11-04 2 views
0

나는 성능 테스트를하고 있고 혼란스럽고 혼란스럽고 다른 사람이 약간의 빛을 비추기를 바랬다.SoapHttpClientProtocol 대 HttpWebRequest

HttpWebRequest와 SoapHttpClientProtocol 간의 성능을 비교하고 있습니다. 내 테스트에서는 SoapHttpClientProtocol 클래스가 두 배 빠르게 수행되는 것을 볼 수 있습니다. 그러나 HttpWebRequest 성능이 더 좋을 것으로 예상했습니다.

누구나 제공 할 수있는 통찰력에 감사드립니다.

샘 여기

는 HttpWebRequest를 여기

public string RetrieveValue() 
{ 
    ASCIIEncoding encoding = new ASCIIEncoding(); 

    byte[] payload = encoding.GetBytes("sIP="); 

    string Url = @"url/RetrieveValue"; 

    HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(Url); 
    wr.Method = "POST"; 
    wr.KeepAlive = false; 
    wr.ContentType = "application/x-www-form-urlencoded"; 
    wr.ContentLength = payload.Length; 
    wr.Timeout = 30000; 

    HttpWebResponse webResponse; 

    Stream wrStream = wr.GetRequestStream(); 

    wrStream.Write(payload, 0, payload.Length); 
    wrStream.Close(); 

    webResponse = (HttpWebResponse)wr.GetResponse(); 

    Stream baseStream = webResponse.GetResponseStream(); 

    string result = null; 

    using (StreamReader sr = new StreamReader(baseStream)) 
     result = sr.ReadToEnd(); 

    return result; 
} 

의 코드가 어떻게이 두 가지 테스트를 호출하는 SoapHttpClientProtocol

WebServiceBinding(Name = "Soap", Namespace = "http://namespace.com/")] 
public class MyRetriever : SoapHttpClientProtocol 
{ 
    [SoapDocumentMethod("http://url.com/Retrieve", RequestNamespace = "http://url.com/", ResponseNamespace = "http://url.com/", Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)] 
    public string RetrieveValue(string sVal) 
    { 
     return (string)base.Invoke("RetrieveValue", 
            new object[] { sVal })[0]; 
    } 
} 

답변

0

에 대한 코드입니다? RetrieveValue는 매번 새로운 연결을 설정하고, 테스트 비누 클라이언트의 단일 인스턴스를 사용하고 매번 동일한 오버 헤드가 발생하지 않을 때마다 GetNewSessionKey를 호출하는 경우.

+0

테스트를 반복 할 때마다 MyRetriever 클래스의 새 인스턴스를 만듭니다. – Sam