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(); } }
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); } } }
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)); }