private ProvideAndRegisterResponse exportXDSB(ProvideAndRegisterDocumentSetRequest pandRXDSBRequest, System.ServiceModel.EndpointAddress endpointAddress, X509Certificate2 clientCert) { ProvideAndRegisterResponse pandRResponse = null; // setup a default, we blew it, error response pandRResponse = errorResponse(GlobalValues.CONST_ERROR_CODE_XDSRepositoryError, ""); XDSRepositoryClient xdsRepClient = null; try { // four basic steps // 1) build the message // 2) create the client proxy (using our own binding (instead of depending on a web.config)) // 3) send the message and get back the response // 4) interrogate the repository/xdr recipient response and create a response object //Logger.Debug("begin exportXDSB"); // 1) build the message // setup the WCF in and output messages WCF.Message wcfInput, wcfOutput; XmlSerializer ser = new XmlSerializer(typeof(ProvideAndRegisterDocumentSetRequest)); MemoryStream ms = new MemoryStream(); ser.Serialize(ms, pandRXDSBRequest); ms.Position = 0; XmlReader requestReader = XmlReader.Create(ms); //string requestString = requestReader.ReadOuterXml(); ms.Close(); wcfInput = WCF.Message.CreateMessage(WCF.MessageVersion.Soap12WSAddressing10 , StaticHelpers.XDS_PANDR_ACTION // the action , requestReader); // the body wcfOutput = WCF.Message.CreateMessage(WCF.MessageVersion.Soap12WSAddressing10, ""); // 2) create the client proxy (using our own binding (instead of depending on a web.config)) WSHttpBinding myBinding = new WSHttpBinding(); // some basic binding properties, regardless of transport myBinding.MaxBufferPoolSize = 524288; myBinding.MaxReceivedMessageSize = 67108864; myBinding.MessageEncoding = WSMessageEncoding.Mtom; myBinding.ReaderQuotas.MaxArrayLength = 16384; myBinding.ReaderQuotas.MaxBytesPerRead = 8192; myBinding.ReaderQuotas.MaxDepth = 32; myBinding.ReaderQuotas.MaxNameTableCharCount = 46384; myBinding.ReaderQuotas.MaxStringContentLength = 20000; // tls specifics if (clientCert != null) { myBinding.Security.Mode = SecurityMode.Transport; myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; } else { myBinding.Security.Mode = SecurityMode.None; myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; } xdsRepClient = new XDSRepositoryClient(myBinding, endpointAddress); // tls certificate and callback if (clientCert != null) { xdsRepClient.ClientCredentials.ClientCertificate.Certificate = clientCert; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(StaticHelpers.RemoteCertificateValidation); } // 3) send the message and get back the response // //Logger.Debug("sending message"); //using (StreamWriter sw = new StreamWriter("tempDubugging")) //{ // sw.Write(string.Format("message to send: {0}", wcfInput.ToString())); //} wcfOutput = xdsRepClient.ProvideAndRegisterDocumentSet(wcfInput); // 4) interrogate the repository/xdr recipient response and create a response object pandRResponse = interrogateWCFResponse(wcfOutput); } catch (Exception ex) { // good point for debug logging //Logger.Error(string.Format("exportXDSB catches error: {0}; stack: {1}", ex.Message, ex.StackTrace)); pandRResponse = errorResponse(GlobalValues.CONST_ERROR_CODE_XDSRepositoryError, string.Format("error: {0}; stacktrace{1}", ex.Message, ex.StackTrace)); //throw; } if (xdsRepClient.State == CommunicationState.Opened) { xdsRepClient.Close(); } //Logger.Debug("end exportXDSB"); return(pandRResponse); }
private ProvideAndRegisterResponse exportXDSB(ProvideAndRegisterDocumentSetRequest pandRXDSBRequest, System.ServiceModel.EndpointAddress endpointAddress, X509Certificate2 clientCert) { ProvideAndRegisterResponse pandRResponse = null; // setup a default, we blew it, error response pandRResponse = errorResponse(GlobalValues.CONST_ERROR_CODE_XDSRepositoryError, ""); XDSRepositoryClient xdsRepClient = null; try { // four basic steps // 1) build the message // 2) create the client proxy (using our own binding (instead of depending on a web.config)) // 3) send the message and get back the response // 4) interrogate the repository/xdr recipient response and create a response object //Logger.Debug("begin exportXDSB"); // 1) build the message // setup the WCF in and output messages WCF.Message wcfInput, wcfOutput; XmlSerializer ser = new XmlSerializer(typeof(ProvideAndRegisterDocumentSetRequest)); MemoryStream ms = new MemoryStream(); ser.Serialize(ms, pandRXDSBRequest); ms.Position = 0; XmlReader requestReader = XmlReader.Create(ms); //string requestString = requestReader.ReadOuterXml(); ms.Close(); wcfInput = WCF.Message.CreateMessage(WCF.MessageVersion.Soap12WSAddressing10 , StaticHelpers.XDS_PANDR_ACTION // the action , requestReader); // the body wcfOutput = WCF.Message.CreateMessage(WCF.MessageVersion.Soap12WSAddressing10, ""); // 2) create the client proxy (using our own binding (instead of depending on a web.config)) WSHttpBinding myBinding = new WSHttpBinding(); // some basic binding properties, regardless of transport myBinding.MaxBufferPoolSize = 524288; myBinding.MaxReceivedMessageSize = 67108864; myBinding.MessageEncoding = WSMessageEncoding.Mtom; myBinding.ReaderQuotas.MaxArrayLength = 16384; myBinding.ReaderQuotas.MaxBytesPerRead = 8192; myBinding.ReaderQuotas.MaxDepth = 32; myBinding.ReaderQuotas.MaxNameTableCharCount = 46384; myBinding.ReaderQuotas.MaxStringContentLength = 20000; // tls specifics if (clientCert != null) { myBinding.Security.Mode = SecurityMode.Transport; myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; } else { myBinding.Security.Mode = SecurityMode.None; myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; } xdsRepClient = new XDSRepositoryClient(myBinding, endpointAddress); // tls certificate and callback if (clientCert != null) { xdsRepClient.ClientCredentials.ClientCertificate.Certificate = clientCert; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(StaticHelpers.RemoteCertificateValidation); } // 3) send the message and get back the response // //Logger.Debug("sending message"); //using (StreamWriter sw = new StreamWriter("tempDubugging")) //{ // sw.Write(string.Format("message to send: {0}", wcfInput.ToString())); //} wcfOutput = xdsRepClient.ProvideAndRegisterDocumentSet(wcfInput); // 4) interrogate the repository/xdr recipient response and create a response object pandRResponse = interrogateWCFResponse(wcfOutput); } catch (Exception ex) { // good point for debug logging //Logger.Error(string.Format("exportXDSB catches error: {0}; stack: {1}", ex.Message, ex.StackTrace)); pandRResponse = errorResponse(GlobalValues.CONST_ERROR_CODE_XDSRepositoryError, string.Format("error: {0}; stacktrace{1}", ex.Message, ex.StackTrace)); //throw; } if (xdsRepClient.State == CommunicationState.Opened) { xdsRepClient.Close(); } //Logger.Debug("end exportXDSB"); return pandRResponse; }