public void MultiPartMessageTest() { //Notice that both client and server must enable multi-part messages... using (RpcServer.CreateRpc(iid, new SearchService.ServerStub(new AuthenticatedSearch())) .AddAuthNegotiate() .AddProtocol("ncacn_ip_tcp", "12345") .EnableMultiPart() .StartListening()) { using ( SearchService client = new SearchService(RpcClient.ConnectRpc(iid, "ncacn_ip_tcp", "::1", "12345") .Authenticate(RpcAuthenticationType.Self). EnableMultiPart(1000000))) { // Non-LRPC channels have limitations on message sizes, we use multiple calls to forward large messages // and store state on the server in the RpcSession associated with this client. This is all transparent // to the caller, but this 7 meg message will produce several rpc-calls. SearchRequest.Builder criteria = SearchRequest.CreateBuilder(); byte[] bytes = new byte[2500]; Random r = new Random(); for (int i = 0; i < 2500; i++) { r.NextBytes(bytes); criteria.AddCriteria(Convert.ToBase64String(bytes)); } SearchResponse results = client.Search(criteria.Build()); Assert.AreEqual(2500, results.ResultsCount); } } }
public void MultiPartMessageFailsWithoutHandler() { //Notice that both client and server must enable multi-part messages... using (RpcServer.CreateRpc(iid, new SearchService.ServerStub(new AuthenticatedSearch())) .AddAuthNegotiate() .AddProtocol("ncacn_ip_tcp", "12345") //Omit server response: .EnableMultiPart() .StartListening()) { using ( SearchService client = new SearchService(RpcClient.ConnectRpc(iid, "ncacn_ip_tcp", "::1", "12345") .Authenticate(RpcAuthenticationType.Self). EnableMultiPart(1000000))) { SearchRequest.Builder criteria = SearchRequest.CreateBuilder(); byte[] bytes = new byte[1000000]; new Random().NextBytes(bytes); SearchResponse results = client.Search(criteria.AddCriteria(Convert.ToBase64String(bytes)).Build()); Assert.AreEqual(2500, results.ResultsCount); } } }