我正在关注如何通过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#中这应该很容易吗?
答案 0 :(得分:1)
虽然您现在使用了不同的方法,但是您发布的代码的问题在于您没有调用基类构造函数。
你应该这样做
public TcpClient(EndpointReference endpointreference)
: base(endpointreference)
{}
答案 1 :(得分:0)
根据Kosala W
的建议,我在不使用SOAP消息传递的情况下找到了解决方案。
在解决方案资源管理器中右键单击该项目,然后选择Add
- > Service Reference
。
在对话框中,输入WSDL地址并为其命名。这会在app.config
文件中生成一些标记,其中包含有关输入的端点的详细信息。
现在可以在代码中调用服务引用。例如,如果我创建了一个名为Darwin
的服务引用,我现在可以调用与此Web服务相关的方法,如下所示:
Darwin.LDBServiceSoapClient client = new Darwin.LDBServiceSoapClient();
Darwin.StationBoard myBoard = client.GetDepartureBoard(params, go, here);
客户端用于发送消息,GetDepartureBoard
在Web服务器上执行某些操作(在这种情况下,该方法检索有关指定列车时间离港委员会的数据并以SOAP消息格式返回)。
谢谢Kosala w!