从wsdl创建soap web服务客户端,没有合同方法

时间:2014-12-17 14:53:38

标签: wcf soap-client wse

我很难过,可能是因为不了解肥皂服务。当我创建对当前公共x12健康文档提交服务接口的服务引用时:

http://www.caqh.org/SOAP/WSDL/CORERule2.2.0.xsd

我得到了一些定义soap消息正文的类,但我无法生成客户端代理。

我想用WCF构建我的客户端,但在我发现的每个例子中,他们都有一个现有的合同来生成代理。我没那么奢侈。服务的功能通过soap action调用。

我可以使用类似于this post的代码手动生成调用,但由于'nonce已过期',因此始终拒绝调用。

WCF的示例在它们的WSDL中都有一个很好的契约,所以看起来很简单,但它是无用的代码,因为我无法创建任何接口(自动化)。例如,Rick Strahl's blog post回答了许多问题,如果您有合同消息要致电,那么似乎很棒。我想按照他的方法,但我很难创建客户端(正确)!

所以,我可以使用WSE 3构建一个带有here from MSDN指南的遗留肥皂客户端,但我们现在不应该使用WCF吗?甚至这里的帖子标签都说WSE是最后的选择。

我是否遗漏了有关创建客户端代理的内容?

所以我的问题归结为:如何为WCF中没有合同的soap服务创建Web服务客户端代理?

也许我对调用肥皂服务并不了解,并且可以真正使用一些帮助。

[编辑:另一个想法 - 我可以制作自己的手工制作的合同,从而生成一个代理吗?不确定对soap web服务的XML输出的影响..如果调用看起来正常]

1 个答案:

答案 0 :(得分:1)

您可以查看我的示例项目以获取此wsdl https://bitbucket.org/polacekpavel/servicestacksample/src

或者您可以将ChannelFactory用于http://msdn.microsoft.com/library/ms576132(v=vs.110).aspx 假设你有这个界面 - 把它改成真正的界面。

[ServiceContract]               
public interface IMathService
{
    [OperationContract]
    int Add(int a,int b);
}

然后您可以在运行时使用ABC的自定义配置(地址,绑定,合同)

来调用它
   //define binding 
    //assume your binding using basicHttp, change it if you are using something else
    BasicHttpBinding myBinding = new BasicHttpBinding();           

    //define endpoint url (where service is deployed)
    EndpointAddress myEndpoint = new EndpointAddress("http://localhost:11234/MathService.svc"); //change to real endpoint 

    //Use channel factory instead of generated one
    ChannelFactory<IMathservice> myChannelFactory = new ChannelFactory<IMathservice>(myBinding, myEndpoint); //Change to you WCF interface
    IMathservice mathService= myChannelFactory.CreateChannel();

    //and call it            
    var result = mathService.Add(1,1); //input to your method

    ((IClientChannel)mathService).Close();
    myChannelFactory.Close();