WCF服务调用 - 未添加任何引用

时间:2009-03-17 17:20:15

标签: wcf service testing

我想调用一个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,是否有办法查找输出要发送给服务的请求?

2 个答案:

答案 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。