【问题标题】:WCF Service invoking - without any reference addedWCF 服务调用 - 未添加任何引用
【发布时间】:2013-07-19 00:21:39
【问题描述】:

我想调用 wcf 服务在 http 层进行测试。我不想添加服务引用并创建代理和调用。我想创建一个新的 Web 测试(VSTS),它向服务发送一个 http 请求并将 http 正文中的请求作为 xml 发布(Http post)。

我有服务元数据,我可以通过它查看数据合同,但 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,有没有办法找到发出要发送到服务的请求?

【问题讨论】:

    标签: wcf service testing


    【解决方案1】:

    好吧,您必须创建代理 - 通过添加服务引用或在服务元数据上运行 svcutil 来静态创建代理,或者如果您愿意,您可以完全在代码中动态构建它。

    在这种情况下,您必须准备好服务合同 (ISomethingService),并查看 ChannelFactory < ISomethingService > () 概念 - 这应该可以帮助您入门。

    马克

    【讨论】:

      【解决方案2】:

      是的,你可以,但你必须先做一些工作。

      通过在 wsdl/xsd 元数据上运行 svcutil.exe 来构建服务客户端。这将使用您的服务和数据合同对象生成一个 c#。使用 csc.exe 将其编译为程序集。

      查看soap信封body,您可以创建一个请求对象并使用数据合约序列化程序手动对其进行序列化。或者,您可以在 WcfSvcHost.exe 中托管程序集并将 wcf 日志记录添加到配置文件中。在任何一种情况下,您都只会拥有正确的正文 xml,如果真正的服务使用 xml 序列化程序而不是数据协定序列化程序,即使这样也可能是错误的。

      下一部分是困难的部分,因为您需要了解实际服务的安全模型。如果它只使用证书进行 SSL 和服务器识别,您应该能够使用 WebClient 发送 xml。但如果它使用相互证书和/或安全令牌,您几乎必须使用正确的绑定手动创建一个通道工厂。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-08
        • 1970-01-01
        • 2012-11-14
        • 2015-04-15
        • 1970-01-01
        相关资源
        最近更新 更多