我想调用一个wcf服务来测试http层。我不想添加服务引用并创建代理并调用。我想创建一个新的Web测试(VSTS),它向服务发送一个http请求,并在http体中发布请求(Http post)作为xml。
我有服务元数据,我可以看到datacontracts,但wsdl:operation只有操作名称,wsdl:input只是空白。
在Contary上,asmx服务将在元数据中包含soap请求,可以将其复制为http请求正文,并替换参数。
如何通过查看服务元数据(无法访问服务日志)从头开始构建wcf服务xml主体,只有结束点。
类似
<root>
<element1>element1</element1>
<element2>element2</element2>
</root>
但是,如何找到它,root必须是像
这样的东西<FunctionRequest xmlns=""http://schemas...."" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"">
(测试本地服务并且工作)
现在,无法访问服务日志(svctraceviewer日志),无法添加服务引用,无法使用svcutil.exe(基于证书的服务),仅使用元数据 - wsdl,是否有办法查找输出要发送给服务的请求?
答案 0 :(得分:0)
好吧,您必须创建代理 - 通过添加服务引用或在服务元数据上运行svcutil来静态创建代理,或者您可以根据需要在代码中动态构建它。
在这种情况下,您必须掌握服务合同(ISomethingService),并查看ChannelFactory < ISomethingService > ()概念 - 这应该可以帮助您入门。
马克
答案 1 :(得分:0)
是的,你可以,但你必须先做一点工作。
通过在wsdl / xsd元数据上运行svcutil.exe来构建服务客户端。这将生成一个包含服务和数据协定对象的c#。使用csc.exe将其编译为程序集。
请参阅soap信封 body ,您可以创建一个请求对象,并使用数据协定序列化程序手动对其进行序列化。或者,您可以在WcfSvcHost.exe中托管程序集,并将wcf日志记录添加到配置文件中。在任何一种情况下,你只能为正文提供正确的xml,如果真正的服务使用xml序列化程序而不是数据协定序列化程序,那么这甚至可能是错误的。
下一部分是困难的部分,因为您需要知道真实服务的安全模型。如果它仅使用SSL和服务器标识的证书,您应该能够使用WebClient发送xml。但是如果它使用相互证书和/或安全令牌,那么你几乎必须用正确的绑定手工创建一个channelfactory。