我需要在Web服务上调用操作,但我不知道请求信封的样子(服务在运行时由用户附加)。
通常我想基于wsdl链接以编程方式生成soap信封。使用给定的链接获取操作列表以及特定结果的结果:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:webservice.contentinn.com">
<soapenv:Header>
<urn:AuthHeaderElement>
<token></company>
</urn:AuthHeaderElement>
</soapenv:Header>
<soapenv:Body>
<urn:TestMethod>
<id></id>
</urn:TestMethod>
</soapenv:Body>
</soapenv:Envelope>
任何人都知道如何做到这一点?
答案 0 :(得分:1)
Answers to this question提出了几种方法:
The example here可能就是你所追求的:
DynamicProxy允许您通过指定服务的WSDL URI在运行时创建动态WCF客户端。 DynamicProxy不依赖于预编译的代理或配置。 DynamicProxy使用MetadataResolver从服务和WsdlImporter下载元数据,以在运行时创建合同和绑定。已编译的动态代理可用于使用反射调用服务上的操作。
该示例显示了动态代理如何调用使用简单类型和复杂类型的操作。使用流程如下。
创建指定服务的WSDL URI的ProxyFactory。
DynamicProxyFactory factory = new DynamicProxyFactory(“http://localhost:8080/WcfSamples/DynamicProxy?wsdl”);
- 醇>
浏览端点,元数据,合同等。
factory.Endpoints factory.Metadata factory.Contracts factory.Bindings
- 通过指定端点或合同名称,为端点创建DynamicProxy。
醇>
DynamicProxy proxy = factory.CreateProxy("ISimpleCalculator");
OR
DynamicProxy proxy = factory.CreateProxy(endpoint);
- 在DynamicProxy上调用操作
醇>
double result = (dobule)proxy.CallMethod("Add", 1d ,2d);
- 关闭DynamicProxy
醇>
proxy.Close();
运行示例:编译解决方案,运行CalculatorService.exe,然后运行CalculatorDynamicClient.exe
答案 1 :(得分:1)
您需要生成代理类;这将生成调用服务操作所需的一切。
有几种方法可以生成代理类
生成代理类后,它会将服务的操作公开为方法。只需调用所需的方法,就会为您生成SOAP信封。