使用C#发送SOAP请求

时间:2016-02-04 09:13:26

标签: c# web-services soap

我正在关注如何通过C#发送SOAP消息的this教程,并已达到这个阶段:

程序

using System;
using System.Xml;
using Microsoft.Web.Services3;
using Microsoft.Web.Services3.Addressing;
using Microsoft.Web.Services3.Messaging;

namespace SOAP
{
    class Program
    {
        static void Main(string[] args)
        {
            Uri strEpr = new Uri("http://www.webservicex.com/globalweather.asmx?WSDL");
            EndpointReference epr = new EndpointReference(strEpr);

            TcpClient client = new TcpClient(epr);
        }
    }
}

TcpClient的

using System.Xml;
using Microsoft.Web.Services3;
using Microsoft.Web.Services3.Addressing;
using Microsoft.Web.Services3.Messaging;

namespace SOAP
{
    class TcpClient : SoapClient
    {
        public TcpClient(EndpointReference endpointreference)
        {
            SoapClient();
        }

        [SoapMethod("RequestResponseMethod")]
        public SoapEnvelope RequestResponseMethod(SoapEnvelope envelope)
        {
            return base.SendRequestResponse("RequestResponseMethod", envelope);
        }
    }
}

但是,在我的TcpClient类的构造函数中,我看到了这个错误:

Non-invocable member 'SoapClient' cannot be used like a method.

我可以理解为什么会这样,因为SoapClient类是抽象的,它的构造函数都受到保护。这是否意味着MSDN文档已过期,或者我在这里遗漏了什么?

我需要做的就是将一条SOAP消息发送到Web服务并获得响应 - 在C#中这应该很容易吗?

2 个答案:

答案 0 :(得分:1)

虽然您现在使用了不同的方法,但是您发布的代码的问题在于您没有调用基类构造函数。

你应该这样做

public TcpClient(EndpointReference endpointreference)
    : base(endpointreference)
{}

答案 1 :(得分:0)

根据Kosala W的建议,我在不使用SOAP消息传递的情况下找到了解决方案。

  1. 在解决方案资源管理器中右键单击该项目,然后选择Add - > Service Reference

  2. 在对话框中,输入WSDL地址并为其命名。这会在app.config文件中生成一些标记,其中包含有关输入的端点的详细信息。

  3. 现在可以在代码中调用服务引用。例如,如果我创建了一个名为Darwin的服务引用,我现在可以调用与此Web服务相关的方法,如下所示:

    Darwin.LDBServiceSoapClient client = new Darwin.LDBServiceSoapClient();
    Darwin.StationBoard myBoard = client.GetDepartureBoard(params, go, here);
    
  4. 客户端用于发送消息,GetDepartureBoard在Web服务器上执行某些操作(在这种情况下,该方法检索有关指定列车时间离港委员会的数据并以SOAP消息格式返回)。

    谢谢Kosala w!