2012-01-06 4 views
0

몇 시간 동안 찾았지만 다소 일반적인 문제라고 생각되는 답변을 찾지 못했습니다.서비스 참조가있는 .NET의 멀티 파트 메시징 C#

서비스 참조 (asmx)를 통해 서비스로 전송하려는 많은 데이터 (문자열 [2000000])가 있습니다. SOAP은 지금 크기 때문에 날아간다. 나는 파이프를 늘리고 싶지 않다. 내일 보내려면 4M 문자열이 필요할 것이기 때문이다.

그래서 멀티 파트 SOAP 메시지를 생각하고 있었지만 .NET은 기본적으로 이것을 지원하지 않습니다 (맞습니까?). 그렇다면 어떻게해야할까요? 어떤 도움이나 링크가 크게 감사하겠습니다.

[WebMethod] 
public string[] returnSameStringArray(string[] string_array) 
{ 
    return string_array; 
} 

호출 코드 :

BasicHttpBinding basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly); 
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; 
basicHttpBinding.MaxReceivedMessageSize = 131072; 

myServiceReference = new MyService.MyServiceSoapClient(basicHttpBinding, new EndpointAddress(@"http://myaddress/myservice.asmx")); 
myServiceReference.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; 
myServiceReference.ChannelFactory.Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; 

string[] theStringArray = new string[2000000](); //init with something later 
theStringArray = myServiceReference.returnSameStringArray(theStringArray); 

답변

0

난 당신이 zeromq 및 서비스 스택을보고 추천 할 것입니다. 그들은 당신에게 필요한 통제의 양을 제공합니다.

페이로드를 여러 통화로 나누어 볼 수도 있습니다.

+0

페이로드를 여러 호출로 분할하지 않는 것이 좋습니다 (페이로드가 변경되거나 문자열 중 하나가 여러 메가 바이트 파일 구문 일 수 있으므로 어쨌든 분할해야합니다). zeromq 및 서비스 스택 제안을 주셔서 감사합니다. 지금 살펴 보겠습니다. – Tizz

+0

zeromq에 대한 간략한 설명을 얻은 후에 위의 코드에서 어떻게 구현되는지 이해하지 못합니다. 나는 수송과 네트워크에 비교적 새로운 것이고, 아마 나는 현재의 이해로 zeromq의 필요성을 이해할 수 없을 것이다. 이 용도로 사용할 수있는 다중 부분 SOAP 프로토콜이 있습니까? 제 3 자 프로토콜을 사용해야합니까? – Tizz

+0

zeromq는 대용량의 페이로드에 적합하며 비즈니스 로직을 그대로 유지 한 채로 분할 할 수있는 방법을 제공합니다. –