使用ServiceStack访问SOAP Web服务

4
我正在使用ServiceStack创建客户端/服务器应用程序相互通信的过程中,效果很好,但我还需要访问外部SOAP Web服务。
我试图使用Soap12ServiceClient进行访问,但我找不到任何例子,然后我采用了添加WCF服务引用的方式,这个方法有效,但需要创建大量代码。
是否可能以与我使用JsonServiceClient发送消息/请求并接收消息/响应相同的简单方式使用Soap12ServiceClient?如果是这样,请帮帮我或指向一个示例?

虽然这是一个老问题,但我对做同样的事情很感兴趣——使用ServiceStack的SOAP客户端调用外部SOAP终端而不是使用Visual Studio生成的臃肿代理。经过一些尝试和错误,我注意到ServiceStack的Soap11ServiceClient和Soap12ServiceClient有硬编码的端点"/Soap11"和"/Soap12"。所以,不幸的是,这是不可能的。 - PatrickSteele
1个回答

1

我不确定您遇到了什么问题,因为所有的ServiceStack的C#服务客户端都实现了相同的IServiceClient,所以它们可以以相同的方式使用。以下是ServiceStack内置的所有C#服务客户端调用相同的Hello World服务的示例:

[TestFixture]
public class HelloWorldServiceClientTests
{
    public static IEnumerable ServiceClients
    {
        get
        {
            return new IServiceClient[] {
                new JsonServiceClient(Config.ServiceStackBaseUri),
                new JsvServiceClient(Config.ServiceStackBaseUri),
                new XmlServiceClient(Config.ServiceStackBaseUri),
                new Soap11ServiceClient(Config.ServiceStackBaseUri),
                new Soap12ServiceClient(Config.ServiceStackBaseUri)
            };
        }
    }

    [Test, TestCaseSource("ServiceClients")]
    public void HelloWorld_with_Sync_ServiceClients(IServiceClient client)
    {
        var response = client.Send<HelloResponse>(new Hello { Name = "World!" });

        Assert.That(response.Result, Is.EqualTo("Hello, World!"));
    }
}

尽管SOAP的工作方式类似于任何其他C#客户端,但通常不会以这种方式使用它,因为如果您能够使用通用的C# SOAP服务客户端,那么您也很可能能够使用任何其他服务客户端,这些客户端都比SOAP更快、更强大和更易于版本控制——除了其能够生成客户端代理的能力之外,SOAP实际上没有任何优点,而您说您不想这样做。 如果您还没有决定应该使用哪个终端点或格式,我建议阅读我的InfoQ采访,其中讨论了SOAP的缺点和使用其他格式的好处。

1
抱歉,我觉得你误解了我的问题(或者可能是我表述不清)。我正在编写客户端和服务器,并在两端使用ServiceStack,使用JsonServiceClient访问数据,这很完美。 但是我的服务器(从数据库检索数据)还必须从另一个Web服务中检索数据,不是我的,也不是由ServiceStack提供支持的,我无法修改它,是一个SOAP服务,在另一台服务器上。 所以我的问题是:我可以使用Soap12ServiceClient访问该服务器吗? - Mattia Durli
或者更好的方法是:在两端都使用ServiceStack,我只需要2行代码就可以获取我的数据...如果我只使用客户端(因为我无法控制SOAP服务器),那么我能否以比使用“添加服务引用”更清晰的方式实现它? - Mattia Durli
如果您正在调用外部SOAP服务,则与ServiceStack无关,因此您不能使用ServiceStack的通用服务客户端。因此,您应该按照外部服务提供商建议的方式进行操作。 - mythz
3
服务提供商只提供了WSDL文件...我使用Visual Studio的“添加服务引用”轻松完成了这个过程。我只是希望ServiceStack的客户端组件也能够提供使用外部SOAP服务的可能性。 谢谢! - Mattia Durli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接