Ejemplo n.º 1
0
        public int MyTwoWayOperation(int a, int b)
        {
            // Create HttpClient and send request
            Debug.Print("Sending Request:");
            byte[] request = BuildMyTwoWayRequest(a, b);
            Debug.Print(new string(Encoding.UTF8.GetChars(request)));
            DpwsHttpClient   httpClient = new DpwsHttpClient();
            DpwsSoapResponse response   =
                httpClient.SendRequest(request,       // soap message
                                       this.serviceTransportAddress,
                                       false,         //is one way?
                                       false          // is chunked?
                                       );

            if (response == null)
            {
                throw new InvalidOperationException("Two-way response was null.");
            }
            try
            {
                return(ParseTwoWayResponse(response.Reader));
            }
            finally
            {
                response.Reader.Close();
            }
        }
Ejemplo n.º 2
0
        private void CheckFaultResponse(DpwsSoapResponse response)
        {
            if (response == null)
            {
                throw new Exception("Response was null.");
            }
            // Check for fault message
            if (response.Header.Action == "http://schemas.xmlsoap.org/ws/2004/08/addressing/fault")
            {
                // Parse fault message
                response.Reader.ReadStartElement("Fault", WsWellKnownUri.WsaNamespaceUri);

                response.Reader.ReadStartElement("Code", WsWellKnownUri.WsaNamespaceUri);
                string code = response.Reader.ReadElementString("Value", WsWellKnownUri.WsaNamespaceUri);
                response.Reader.ReadStartElement("Subcode", WsWellKnownUri.WsaNamespaceUri);
                string subcode = response.Reader.ReadElementString("Value", WsWellKnownUri.WsaNamespaceUri);
                response.Reader.ReadEndElement();
                response.Reader.ReadEndElement();

                response.Reader.ReadStartElement("Reason", WsWellKnownUri.WsaNamespaceUri);
                string reason = response.Reader.ReadElementString("Text", WsWellKnownUri.WsaNamespaceUri);
                response.Reader.ReadEndElement();

                string detail = response.Reader.ReadElementString("Detail", WsWellKnownUri.WsdpNamespaceUri);

                Debug.Print("Fault response received:");
                Debug.Print("Code: " + code);
                Debug.Print("Subcode: " + subcode);
                Debug.Print("Reason: " + reason);
                Debug.Print("Detail: " + detail);

                string exceptionMessage = reason + "\n" + detail +
                                          "\nCode: " + code +
                                          "\nSubcode: " + subcode;
                // Throw exception depending on sub code
                switch (subcode)
                {
                case "Ws:Exception":
                    throw new Exception(exceptionMessage);

                case "Ws:ArgumentException":
                    throw new ArgumentException(exceptionMessage);

                case "Ws:ArgumentNullException":
                    throw new ArgumentNullException(exceptionMessage);

                case "Ws:InvalidOperationException":
                    throw new InvalidOperationException(exceptionMessage);

                case "Ws:XmlException":
                    throw new XmlException(exceptionMessage);

                default:
                    throw new Exception(exceptionMessage);
                }
            }
        }
Ejemplo n.º 3
0
        public int MyTwoWayOperation(int a, int b)
        {
            // Create HttpClient and send request
            Debug.Print("Sending Request:");
            byte[] request = BuildMyTwoWayRequest(a, b);
            Debug.Print(new string(Encoding.UTF8.GetChars(request)));
            DpwsHttpClient   httpClient = new DpwsHttpClient();
            DpwsSoapResponse response   =
                httpClient.SendRequest(request,       // soap message
                                       this.serviceTransportAddress,
                                       false,         //is one way?
                                       false          // is chunked?
                                       );

            if (response == null)
            {
                throw new InvalidOperationException("Two-way response was null.");
            }
            //if (response.Header.Action == "http://schemas.xmlsoap.org/ws/2004/08/addressing/fault")
            //  throw new Exception();
            CheckFaultResponse(response);
            return(ParseTwoWayResponse(response.Reader));
        }