Share via


Using the DPWS Client

[This documentation is for preview only, and is subject to change in later releases. Blank topics are included as placeholders.]

Make a service call with your DPWS client class, a class that can be generated from a WSDL file using the MfSvcUtil tool.

Sending a Request in the DPWS Client

To make a web service request from the client, build the XML for the SOAP request using XmlWriter, and send the request using a WsHttpClient object. If the request is a two-way request that returns a response, you will also have to parse the response.

The following code example demonstrates how to call a two-way web service method.

/// <summary>
/// Method calls a two-way method that sums two integers.
/// </summary>
/// <param name="x">A integer containing the x value to add.</param>
/// <param name="y">A integer continaining the y value to add.</param>
/// <returns>An integer sum of x+y.</returns>
public int Request(int x, int y)
{
    ...
    // call your function to build the request
    byte[] Request = BuildTwoWayRequest(x, y, sEndPointURI);
    DpwsHttpClient httpClient = new DpwsHttpClient();
    // send the request
    DpwsSoapResponse response = httpClient.SendRequest(Request, sEndPointURI, false, false);
    if (response != null)
    {
        // call your function to parse the request
        return Parse2WayResponse(response.Header, response.Envelope);
    }
    else
    {
        ...
    }
}

JJ646598.collapse_all(en-us,VS.113).gifBuilding a Request

The following code example shows how to create a web service request.

/// <summary>
/// Method builds an Xml 2way request message.
/// </summary>
/// <param name="X">An integer containing the first integer to add.</param>
/// <param name="Y">An integer containing the second integer to add.</param>
/// <param name="endpointAddress">A string containing the service endpoint address.</param>
/// <returns>The constructed request.</returns>
private byte[] BuildTwoWayRequest(int X, int Y, string endpointAddress)
{
    MemoryStream soapStream = new MemoryStream();
    XmlWriter xmlWriter = XmlWriter.Create(soapStream);

    // Write processing instructions and root element
    xmlWriter.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
    xmlWriter.WriteStartElement("soap", "Envelope", "https://www.w3.org/2003/05/soap-envelope");

    // Write namespaces
    xmlWriter.WriteAttributeString("xmlns", "wsdp", null, Namespaces.GetNamespace("wsdp"));
    xmlWriter.WriteAttributeString("xmlns", "wsd", null, Namespaces.GetNamespace("wsd"));
    xmlWriter.WriteAttributeString("xmlns", "wsa", null, Namespaces.GetNamespace("wsa"));
    xmlWriter.WriteAttributeString("xmlns", "smpl", null, "https://schemas.example.org/SimpleService");

    // Write header
    xmlWriter.WriteStartElement("soap", "Header", null);
    xmlWriter.WriteStartElement("wsa", "To", null);
    xmlWriter.WriteString(endpointAddress);
    xmlWriter.WriteEndElement(); // End To
    xmlWriter.WriteStartElement("wsa", "Action", null);
    xmlWriter.WriteString("https://schemas.example.org/SimpleService/TwoWayRequest");
    xmlWriter.WriteEndElement(); // End Action
    xmlWriter.WriteStartElement("wsa", "From", null);
    xmlWriter.WriteStartElement("wsa", "Address", null);
    xmlWriter.WriteString(EndpointAddress);
    xmlWriter.WriteEndElement(); // End Address
    xmlWriter.WriteEndElement(); // End From
    xmlWriter.WriteStartElement("wsa", "MessageID", null);
    xmlWriter.WriteString("urn:uuid:" + Guid.NewGuid());
    xmlWriter.WriteEndElement(); // End MessageID
    xmlWriter.WriteEndElement(); // End Header

    // write body
    xmlWriter.WriteStartElement("soap", "Body", null);
    xmlWriter.WriteStartElement("smpl", "TwoWayRequest", null);
    xmlWriter.WriteStartElement("smpl", "X", null);
    xmlWriter.WriteString(X.ToString());
    xmlWriter.WriteEndElement(); // End X
    xmlWriter.WriteStartElement("smpl", "Y", null);
    xmlWriter.WriteString(X.ToString());
    xmlWriter.WriteEndElement(); // End Y
    xmlWriter.WriteEndElement(); // End TwoWayRequest
    xmlWriter.WriteEndElement(); // End Body

    xmlWriter.WriteEndElement();

    // Create return buffer and close writer
    xmlWriter.Flush();
    byte[] soapBuffer = soapStream.ToArray();
    xmlWriter.Close();

    return soapBuffer;
}

JJ646598.collapse_all(en-us,VS.113).gifParsing a Response

The following code shows how to parse a response.

/// <summary>
/// Parses the 2way message response and returns the results.
/// </summary>
/// <param name="header">A WsdWsaHeader object containing a SOAP response header.</param>
/// <param name="envelope">A WsdXmlDocument object containing the entire SOAP response.</param>
/// <returns></returns>
private int Parse2WayResponse(WsWsaHeader header, WsXmlDocument envelope)
{
    WsXmlNode tempNode;

    // There should be a lot more validation hear but this is the minimal effort required to get the sum
    if ((tempNode = envelope.SelectSingleNode("Body/TwoWayResponse/Sum", false)) == null)
    {
        Debug.Print("");
        Debug.Print("Body/TwoWayResponse/Sum element is missing. Returning 0.");
        return 0;
    }
    int Sum = Convert.ToInt32(tempNode.Value);

    return Sum;
}