From 3df8b2128aa4e0263b02373ac5ee335572598b68 Mon Sep 17 00:00:00 2001 From: Markus Zorn Date: Tue, 29 Nov 2011 16:30:51 +0100 Subject: [PATCH] added possibility to configure streamed binding --- .../GraphDS_RemoteClient.cs | 19 +++++++++--- .../RemoteAPIService/RemoteAPIService.cs | 6 +++- .../RemoteAPIService/sonesRPCServer.cs | 29 ++++++++++++++----- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/GraphDS/Client/Implementations/GraphDSRemoteClient/GraphDS_RemoteClient.cs b/GraphDS/Client/Implementations/GraphDSRemoteClient/GraphDS_RemoteClient.cs index 23eb926b..753c9e7e 100644 --- a/GraphDS/Client/Implementations/GraphDSRemoteClient/GraphDS_RemoteClient.cs +++ b/GraphDS/Client/Implementations/GraphDSRemoteClient/GraphDS_RemoteClient.cs @@ -33,14 +33,22 @@ public class GraphDS_RemoteClient : IGraphDSClient, ITransactionable, IServiceTo private StreamedService _StreamedService; private SecurityToken _SecurityToken; private Int64 _TransactionToken; + + public Boolean UseStreaming { get; private set; } #endregion #region Constructor - public GraphDS_RemoteClient(Uri myServiceAddress, bool myIsSecure = false) + public GraphDS_RemoteClient(Uri myServiceAddress, bool myIsSecure = false, bool myUseStreaming = false) { + #if __MonoCS__ + UseStreaming = false; + #else + UseStreaming = myUseStreaming; + #endif + BasicHttpBinding BasicBinding = new BasicHttpBinding(); BasicBinding.Name = "sonesBasic"; BasicBinding.MessageEncoding = WSMessageEncoding.Text; @@ -62,10 +70,13 @@ public GraphDS_RemoteClient(Uri myServiceAddress, bool myIsSecure = false) StreamedBinding.Name = "sonesStreamed"; StreamedBinding.MessageEncoding = WSMessageEncoding.Text; StreamedBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; - StreamedBinding.TransferMode = TransferMode.Streamed; - StreamedBinding.MaxReceivedMessageSize = 2147483648; - StreamedBinding.MaxBufferSize = 4096; + StreamedBinding.MaxReceivedMessageSize = 2147483647; + StreamedBinding.MaxBufferSize = (UseStreaming == true) ? 4096 : 2147483647; StreamedBinding.SendTimeout = new TimeSpan(1, 0, 0, 0); + if (UseStreaming == true) + { + StreamedBinding.TransferMode = TransferMode.Streamed; + } if (myIsSecure == true) { diff --git a/Plugins/GraphDS/Services/Implementations/RemoteAPIService/RemoteAPIService.cs b/Plugins/GraphDS/Services/Implementations/RemoteAPIService/RemoteAPIService.cs index 146e688c..14b3ce00 100644 --- a/Plugins/GraphDS/Services/Implementations/RemoteAPIService/RemoteAPIService.cs +++ b/Plugins/GraphDS/Services/Implementations/RemoteAPIService/RemoteAPIService.cs @@ -82,8 +82,12 @@ public void Start(IDictionary myStartParameter = null) if (myStartParameter != null && myStartParameter.ContainsKey("Port")) Port = (ushort)Convert.ChangeType(myStartParameter["Port"], typeof(ushort)); + bool UseStreaming = false; + if (myStartParameter != null && myStartParameter.ContainsKey("UseStreaming")) + UseStreaming = (bool)Convert.ChangeType(myStartParameter["UseStreaming"], typeof(bool)); + _RunningTime.Start(); - _RPCServer = new sonesRPCServer(_GraphDS, Address, Port, UriPattern, _IsSecure); + _RPCServer = new sonesRPCServer(_GraphDS, Address, Port, UriPattern, _IsSecure, UseStreaming); _RPCServer.StartServiceHost(); _description = " * RemoteAPI Service is started at " + _RPCServer.URI + Environment.NewLine + " * web service definition can be found at " + Environment.NewLine + diff --git a/Plugins/GraphDS/Services/Implementations/RemoteAPIService/sonesRPCServer.cs b/Plugins/GraphDS/Services/Implementations/RemoteAPIService/sonesRPCServer.cs index e8946ab9..a0cda3cb 100644 --- a/Plugins/GraphDS/Services/Implementations/RemoteAPIService/sonesRPCServer.cs +++ b/Plugins/GraphDS/Services/Implementations/RemoteAPIService/sonesRPCServer.cs @@ -63,6 +63,11 @@ public class sonesRPCServer /// Indicates wether the Server uses SSL /// public Boolean IsSecure { get; private set; } + + /// + /// Indicates wether the Server provides the streamed binding + /// + public Boolean UseStreaming { get; private set; } /// /// Indicates wether the Server is running @@ -104,8 +109,14 @@ public class sonesRPCServer #region C'tor - public sonesRPCServer(IGraphDS myGraphDS, IPAddress myIPAdress, ushort myPort, String myURI, Boolean myIsSecure, Boolean myAutoStart = false, Boolean myIsSingleFile = false) + public sonesRPCServer(IGraphDS myGraphDS, IPAddress myIPAdress, ushort myPort, String myURI, Boolean myIsSecure, Boolean myUseStreaming = false, Boolean myAutoStart = false, Boolean myIsSingleFile = false) { + + #if __MonoCS__ + this.UseStreaming = false; + #else + this.UseStreaming = myUseStreaming; + #endif this._GraphDS = myGraphDS; this.IsSecure = myIsSecure; this.ListeningIPAdress = myIPAdress; @@ -114,6 +125,8 @@ public sonesRPCServer(IGraphDS myGraphDS, IPAddress myIPAdress, ushort myPort, S this.URI = new Uri((myIsSecure == true ? "https://" : "http://") + myIPAdress.ToString() + ":" + myPort + "/" + myURI); this.MexUri = new Uri("http://" + myIPAdress.ToString() + ":" + (myPort + 1) + "/" + myURI); + + if (!this.URI.IsWellFormedOriginalString()) throw new Exception("The URI Pattern is not well formed!"); @@ -148,27 +161,29 @@ private void InitializeServer() readerQuotas.MaxArrayLength = 2147483647; BasicBinding.ReaderQuotas = readerQuotas; + BasicHttpBinding StreamedBinding = new BasicHttpBinding(); StreamedBinding.Name = "sonesStreamed"; StreamedBinding.Namespace = Namespace; StreamedBinding.MessageEncoding = WSMessageEncoding.Text; StreamedBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; - StreamedBinding.TransferMode = TransferMode.Streamed; - StreamedBinding.MaxReceivedMessageSize = 2147483648; - StreamedBinding.MaxBufferSize = 4096; + StreamedBinding.MaxReceivedMessageSize = 2147483647; + StreamedBinding.MaxBufferSize = (UseStreaming == true) ? 4096 : 2147483647; StreamedBinding.SendTimeout = new TimeSpan(1, 0, 0, 0); StreamedBinding.ReceiveTimeout = new TimeSpan(1, 0, 0, 0); + if (UseStreaming == true) + { + StreamedBinding.TransferMode = TransferMode.Streamed; + } WebHttpBinding WebBinding = new WebHttpBinding(); WebBinding.Name = "sonesWeb"; WebBinding.Namespace = Namespace; WebBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; - - if (IsSecure) { - BasicBinding.Security.Mode = BasicHttpSecurityMode.Transport; + BasicBinding.Security.Mode = BasicHttpSecurityMode.Transport; StreamedBinding.Security.Mode = BasicHttpSecurityMode.Transport; }