【问题标题】:How to create a WCF Service with no structure (XML request and response)如何创建没有结构的 WCF 服务(XML 请求和响应)
【发布时间】:2015-10-15 15:15:31
【问题描述】:

在我最近的项目中,我收到了一个 WSDL 和一个示例请求,用于构建 Web 服务。 WCF 的契约优先能力较弱,但我确实提出了一些可能有效的复杂工具(我尝试了许多工具,最好的是 WSCF.Blue)。 SOAP 请求标头、展开的正文和 XSD 都是非正统的,我担心这个集成伙伴会遇到很多奇怪的 XML 问题,所以如果可能的话,我宁愿提供一个看起来像这样的服务:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    XmlElement DoStuff(XmlElement request);
}

而不是...

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    [XmlSerializerFormat(SupportFaults = true, Style = OperationFormatStyle.Document, Use = OperationFormatUse.Literal)]
    ResponseType DoStuff(RequestType request);
}

这个 SOAP 请求的超级简化版本如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Header>
        <ns1:CustomHeader priority="1" txId="1" xmlns:ns1="http://namespace"/>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <UnwrappedRequest creationDateTime="2014-04-21T16:15:37Z" xmlns="http://anothernamespace.com">
            <ns1:SomeDataNode xmlns:ns1="http://namespace">
                <ns1:MoreData AFlag="false" Thingy="Dude">
                </ns1:MoreData>
            </ns1:SomeDataNode>
        </UnwrappedRequest>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我想坚持使用 WCF 而不仅仅是创建 HTTP 处理程序或其他东西的主要原因是因为我们还必须使用 WS-Security,其中包括一堆其他标头和在实际 API 调用之前建立会话的请求。我尝试了几件几乎可以工作的事情,但它们排除了请求的顶部节点及其所有属性(上面示例中的节点)。我还需要自定义标头 XML。我知道你可以将它绑定到请求对象的属性中,但我希望请求只是一个 XML 字符串。

您会认为那里的每个框架都应该能够轻松地做到这一点,我知道 WCF 也不例外。我们都喜欢 WCF 的一点是它的灵活和强大。问题是我们大多数人并不生活在 WCF 和集成中,所以我们永远不会成为专家,我有一个时间表来满足。任何帮助将不胜感激!

【问题讨论】:

  • 自从我使用 WCF 已经有一段时间了,但最后我记得它需要一个配置文件。您可以尝试另一种解决方案,例如 ServiceStack。他们有一个较旧的开源版本,去下载并滚动到底部,我觉得它很容易使用而且是免费的。
  • XML 可以放入 HTML 中的 CData 标记中。

标签: c# xml web-services wcf soap


【解决方案1】:

我知道我可以通过实现或覆盖一堆 WCF 内部接口和类来做到这一点,但我采取了简单的方法并构建了一个自定义 HttpHandler 来处理soap调用。它工作得很好(而且速度非常快)。唯一有点具有挑战性的部分是构建 WS-Security 的东西,但即使这样也不算太糟糕。我很清楚,他们调用的系统只是在执行自定义 HTTP 发布。不幸的是,微软的工具不支持如此大量的有效 Web 服务场景。我与一些经验丰富的集成专家进行了交谈,他们在许多合作伙伴集成中放弃了 WCF,转而使用自定义解决方案。如果您可以控制集成项目的双方,那就太好了,使用 WCF。如果您正在与拥有多种可集成技术的合作伙伴合作,请准备好成为定制 WCF 方面的专家或寻找替代解决方案。 如果您遇到同样的问题,请随时给我发送消息,我可以与您分享我的代码。这里要粘贴的内容太多了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    相关资源
    最近更新 更多