如何创建没有结构的WCF服务(XML请求和响应)
在我最近的项目中,我已经获得了使用WSDL和示例请求来构建Web服务。 WCF具有较弱的合同优先功能,但我确实想出了一些可能有用的复杂工具(我尝试了许多工具,最好的是WSCF.Blue)。 SOAP请求标头,未包装正文和XSD是非正统的,我担心这个集成合作伙伴会有很多奇怪的XML问题,所以我宁愿只要有可能就有这样的服务:如何创建没有结构的WCF服务(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);
}
A的这是什么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内部接口和类来完成此任务,但是我使用了简单的路由并构建了一个自定义HttpHandler来处理soap调用。它完美的工作(它超快速)。唯一有点具有挑战性的部分是构建WS-Security的东西,但即使这样也不算太糟糕。我很清楚,他们所调用的系统只是执行一个自定义HTTP发布。不幸的是,微软的工具不支持如此大量的有效Web服务场景。我与几位经验丰富的集成专家交谈,他们在许多合作伙伴集成中放弃了WCF定制解决方案。如果你在控制一个整合项目的双方,那么很好,使用WCF。如果您正在与具有多种技术的合作伙伴合作,请准备好成为定制WCF的专家或寻找替代解决方案。 如果您遇到同样的问题,请随时给我发消息,我可以与您分享我的代码。这里粘贴太多了。
自从我与WCF合作已经有一段时间了,但最后我还记得它需要一个配置文件。你可以尝试另一种解决方案,如[ServiceStack](https://servicestack.net/)。他们有一个较老的开源版本,去下载并滚动到底部,我发现它很容易使用,它是免费的。 –
XML可以放入HTML中的CData标签中。 – jdweng