在C#.NET中通过HTTP发布的SOAP对象 [英] SOAP object over HTTP post in C# .NET

查看:102
本文介绍了在C#.NET中通过HTTP发布的SOAP对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在C#.NET中编写SOAP消息(包括头文件),以使用HTTP post发送到URL。我想将其发送到的URL不是Web服务,它只接收SOAP消息以最终从中提取信息。有关如何执行此操作的任何想法?

I am trying to compose a SOAP message(including header) in C# .NET to send to a URL using HTTP post. The URL I want to send it to is not a web-service, it just receives SOAP messages to eventually extract information from it. Any ideas on how to do this?

推荐答案

首先,您需要创建有效的XML。我使用Linq to XML来实现这一点,如下所示:

First you need to create a valid XML. I use Linq to XML to achieve this, like follow:

XNamespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/";
var document = new XDocument(
               new XDeclaration("1.0", "utf-8", String.Empty),
               new XElement(soapenv + "Envelope",
                   new XAttribute(XNamespace.Xmlns + "soapenv", soapenv),
                   new XElement(soapenv + "Header",
                       new XElement(soapenv + "AnyOptionalHeader",
                           new XAttribute("AnyOptionalAttribute", "false"),
                       )
                   ),
                   new XElement(soapenv + "Body",
                       new XElement(soapenv + "MyMethodName",
                            new XAttribute("AnyAttributeOrElement", "Whatever")
                       )
                   )
                );

然后我使用( EDIT :在此处添加 XDocument.ToString()发送它。)

Then I send it using (EDIT: added XDocument.ToString() down here.)

            var req = WebRequest.Create(uri);
            req.Timeout = 300000;  //timeout
            req.Method = "POST";
            req.ContentType = "text/xml;charset=UTF-8";

            using (var writer = new StreamWriter(req.GetRequestStream()))
            {
                writer.WriteLine(document.ToString());
                writer.Close();
            }

如果我必须阅读一些回复,我这样做(这是后续的上面的代码):

If I have to read some response, I do (this is followup of the above code):

            using (var rsp = req.GetResponse())
            {
                req.GetRequestStream().Close();
                if (rsp != null)
                {
                    using (var answerReader = 
                                new StreamReader(rsp.GetResponseStream()))
                    {
                        var readString = answerReader.ReadToEnd();
                        //do whatever you want with it
                    }
                }
            }

这篇关于在C#.NET中通过HTTP发布的SOAP对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆