是否有可能将简单字符串转换为SOAP消息并发送它?

时间:2014-07-31 05:18:39

标签: c# .net web-services soap service

目前我想知道在c#中可以读取字符串并将其转换为Soapmessage并将其发送到服务器进行处理并再次将响应转换为字符串吗?

1 个答案:

答案 0 :(得分:3)

您的代码应该类似于:

var document = Query(user, pass, date, regc);
var webRequest = Request(Url, Action, document);
var soapResult = Response(webRequest);
happiness = soapResult.Deserialize(out result);

查询:

internal static string Query(string user, string pass, string date, string regc)
{
    var doc = string.Format(@"<?xml version='1.0' encoding='UTF-8'?>
        <s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'>
            <s:Body xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
                xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
            <PersonnelInfo xmlns='http://propartner.ee/'>
                <PersonnelInfoRequest xmlns=''>
                <username>{0}</username>
                <password>{1}</password>
                <reg_code>{2}</reg_code>
                <date>{3}</date>
                <country>est</country>
                <language>est</language>
                </PersonnelInfoRequest>
            </PersonnelInfo>
            </s:Body>
        </s:Envelope>", user, pass, regc, date);
    return doc;
}

请求:

    internal static HttpWebRequest Request(string url, string action, string doc)
    {
        var soapEnvelop = new XmlDocument();
        soapEnvelop.LoadXml(doc);
        var webRequest = (HttpWebRequest)WebRequest.Create(url);
        webRequest.Headers.Add("SOAPAction", action);
        webRequest.ContentType = "text/xml;charset=\"utf-8\"";
        webRequest.Accept = "text/xml";
        webRequest.Method = "POST";
        webRequest.Host = "wsrvc1.propartner.ee";
        using (var stream = webRequest.GetRequestStream())
        {
            soapEnvelop.Save(stream);
        }
        return webRequest;
    }

响应:

    internal static string Response(HttpWebRequest webRequest)
    {
        var asyncResult = webRequest.BeginGetResponse(null, null);
        asyncResult.AsyncWaitHandle.WaitOne();
        using (var webResponse = webRequest.EndGetResponse(asyncResult))
        {
            var responsesteam = webResponse.GetResponseStream();
            if (responsesteam == null) return default(string);
            using (var rd = new StreamReader(responsesteam))
            {
                var soapResult = rd.ReadToEnd();
                return soapResult;
            }
        }
    }