c# - 如何使用 .NET 以编程方式将信息发送到 C# 中的 Web 服务?

标签 c# .net web-services webrequest

我知道这算作重新发明轮子,但我需要知道如何通过 http/soap/xml 和 Web 消息与 Web 服务进行通信。原因是我需要与第三方 Web 服务通信才能工作,但 WSDL 或其他东西有问题,并且在使用 .NET 向导连接到它时无法正常工作。

所以,谁能给我一个过程/简单的例子/等等。如何做到这一点,或者任何人都可以给我一个解释它的地方的链接吗?我不太了解 Web 请求和响应。

如何构造和发送请求?如何解析响应?

这是一个简单网络服务的代码。假设 .asmx 的地址是“http://www.mwebb.com/TestSimpleService.asmx”:

using System;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

namespace TestSimpleService
{
    [WebService]
    public class Soap : System.Web.Services.WebService
    {
        [WebMethod]
        public string SayHello(string name)
        {
            return "Hello " + name + "!";
        }
    }
}

如何调用这个方法?

感谢任何帮助。

编辑

我真的只想知道如何将数据发送到网络服务。我可以获得所有方法/SOAP 操作/URL 数据,并且可以解析响应数据。我只是不知道要使用什么对象或如何使用它们。

如果有人知道一些简单的 .NET soap 客户端,例如 Python 中的 SUDS,那也会有所帮助。

最佳答案

如果您想直接通信,我会考虑使用 HTTPWebRequest,因为最终 Web 服务调用只是使用 HTTP POST 发送的 XML。

以下链接有一些示例:http://geekswithblogs.net/marcel/archive/2007/03/26/109886.aspx

作为一种在以编程方式与 .net 联系之前测试外部网络服务的方法,一种方法是使用像 SOAPUI 这样的测试工具。生成您认为需要发布到网络服务的确切 XML,并使用该工具手动发送它

然后您可以开发 .net 等价物

编辑 - 这是我根据上面的链接调用您的示例服务(使用 SOAP1.2)的一个简单示例:

        {
            string soap = @"<?xml version=""1.0"" encoding=""utf-8""?>
<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
   xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" 
   xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"">
  <soap:Body>
    <SayHello xmlns=""http://tempuri.org/"">
      <name>My Name Here</name>
    </SayHello>
  </soap:Body>
</soap:Envelope>";

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:2439/Soap.asmx");
            req.ContentType = "application/soap+xml;";
            req.Method = "POST";

            using (Stream stm = req.GetRequestStream())
            {
                using (StreamWriter stmw = new StreamWriter(stm))
                {
                    stmw.Write(soap);
                }
            }

            WebResponse response = req.GetResponse(); 
            Stream responseStream = response.GetResponseStream();

            // Do whatever you need with the response
            Byte[] myData = ReadFully(responseStream);
            string s = System.Text.ASCIIEncoding.ASCII.GetString(myData);
        }

ReadFully 方法来自 http://www.yoda.arachsys.com/csharp/readbinary.html看起来它起源于 Jon Skeet。

关于c# - 如何使用 .NET 以编程方式将信息发送到 C# 中的 Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4564352/

相关文章:

c# - 有什么理由更喜欢模拟接口(interface)而不是具有可覆盖成员的类?

c# - 在 ASP.NET 页面或母版页中注册 .ascx ASP.NET 用户控件是否会加载?

c# - 在 Visual Studio 中使空格像选项卡一样工作的技巧

.net - NUnit 全局初始化 - 坏主意?

asp.net - Web 表单内联代码开始标记

c# - 在 Visual Studio 2012 中设置 ClickOnce 安装文件夹 URL

c# - 创建可以通过在背景区域中的任意位置拖动来移动的非矩形表单

java - 如何在 Android 中通过 POST 请求查询 Web 服务?

iPhone 的 PHP RESTful Web 服务

web-services - 使用 CXF 通过 SSL 保护 Web 服务通信