我很难过,可能是因为不了解肥皂服务。当我创建对当前公共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输出的影响..如果调用看起来正常]
答案 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();