SOAP连接WCF

SOAP连接WCF,wcf,soap,Wcf,Soap,我正在连接第三方API。他们为我提供了一个WSDL文件,我使用web引用添加了该文件。是否可以通过SOAP连接并在同一连接上发送多条消息 我已经从代理类创建了客户机,但似乎没有Open()或Close()方法。调用方法时,客户端是否连接和断开连接 SampleService client = new SampleService client.SampleMethod(); 编辑: 我已经从WSDL文件中添加了一个“服务引用”。客户机是根据WSDL文件中的“PortType”构造的。有一个Cl

我正在连接第三方API。他们为我提供了一个WSDL文件,我使用web引用添加了该文件。是否可以通过SOAP连接并在同一连接上发送多条消息

我已经从代理类创建了客户机,但似乎没有Open()或Close()方法。调用方法时,客户端是否连接和断开连接

SampleService client = new SampleService

client.SampleMethod();
编辑:


我已经从WSDL文件中添加了一个“服务引用”。客户机是根据WSDL文件中的“PortType”构造的。有一个Close()或Abort()方法。SampleService.client上唯一的方法是SampleMethod()

您应该添加服务引用(WCF),而不是使用过时的Web引用

然后遵循以下模式:

try
{
    SampleServiceClient client = new SampleServiceClient();
    client.SampleMethod();
    //... Make as many calls to as many methods as you like.
    client.SampleMethod();
    client.Close();
}
catch (Exception e)
{
    //client is unusable once an exception occurs.
    ...
    client.Abort();
    throw;
}

您需要使用添加服务引用,而不是添加Web引用。添加后,您可以调用服务,如图所示:

using(SampleServiceClient client = new SampleServiceClient())
{
    var response = client.SampleMethod();
}
希望有帮助

他们为我提供了一个WSDL文件,我使用web引用添加了该文件

在这种情况下,您使用的不是WCF,而是ASP.NET WebServices客户端。在您的情况下,这可能没有太大的区别,但ASP.NET Web服务在将旧代码移动到新版本的.NET framework时主要是为了向后兼容。今天,您应该使用Add服务引用来使用WCF,这也是推荐的其他方法

SOAP连接WCF

没有什么比SOAP连接更好的了。SOAP是通过某种传输协议传输的应用程序协议。在您的情况下,传输协议是HTTP

我已经从代理类创建了客户端,但是没有 似乎是Open()或Close()方法。客户端是否连接并 调用方法时断开连接

您不需要调用
Open
Close
。这一切都在通信堆栈的底层处理。默认情况下,所有HTTP客户端应用程序都使用称为持久连接的东西。这意味着,当您第一次访问某个主机时,在您的客户端计算机和承载目标资源的服务器之间建立了TCP连接。后续调用重用相同的连接。如果该连接在某个预定义的时间内未使用(客户端和服务器都可能有不同的超时),则该连接将关闭,下次客户端想要调用服务器时,它将创建一个新连接(同样,您不需要为此烦恼)


因此,在应用程序中的SOAP代理上调用该方法可以在不存在连接的情况下自动打开连接。您不需要显式关闭连接,但应该释放代理以释放其资源。代理被释放后,连接本身可以存在,并且可以被另一个代理重新使用。

如果我添加“服务引用”,唯一可用的方法是第三方服务公开的方法。有一个关闭或中止方法。客户机是从WSDL文件中的“PortType”构造的?实际上是因为我是从接口而不是从类创建客户机。ISampleServiceClient=新的SampleServiceClient();为什么这些方法不在接口上?@ministrymason-ISampleServiceClient是由第三方朋友定义的自定义接口,而不是由Mircosoft或WCF定义的。主机服务器必须实现Open()和Close(),这是愚蠢的,因为它们只对客户端有用,。谢谢你的回复和澄清。我现在使用WCFThanks进行响应。你在其他帖子上帮了我很多忙!我不确定您所说的“处理代理”是什么意思,但请保持连接打开。你能举个例子吗?很久以前,当我玩这个游戏时,我发现释放代理实际上并没有关闭连接,因为连接可以被其他代理重用——这都是内部处理的。一旦所有打开的连接超时(在一段时间内未使用)或关闭应用程序,它们都将关闭。对单个主机打开的连接数也有限制。请接受答案,或者如果您自己回答了问题,请添加并接受新答案。