예제 #1
0
 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);
         }
     }
 }
예제 #2
0
        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);
                }
            }
        }