2012-01-06 5 views
0

私は何時間も探していましたが、私が想像していた答えはやや一般的な問題です。サービス参照での.NETでのマルチパートメッセージングC#

サービス参照(asmx)を介してサービスに送信したいデータ(string [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

ペイロードを複数のコールに分割しないでください(ペイロードが変更されるか、ストリングの1つが複数メガバイトのファイル解析になる可能性がありますが、分割する必要があります)。 zeromqとサービススタックの提案をありがとう、私は今それらを見ていきます。 – Tizz

+0

zeromqの概要を知った後、私は上記の私のコードのコンテキスト内でどのように実装されるのか理解していません。私は交通機関やネットワークには比較的新しいので、おそらく私は現在の理解でzeromqの必要性を理解することはできません。これに使用できるマルチパートSOAPプロトコルはありませんか?私は第三者のプロトコルを使用する必要がありますか? – Tizz

+0

zeromqは大容量のペイロードに最適で、ビジネスロジックをそのままにして分割する方法を提供します。 –

関連する問題