2015-10-15 63 views
0

在我最近的项目中,我已经获得了使用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和整合中,所以我们从来没有成为专家,我有一个时间表来见面。任何帮助将不胜感激!!

+0

自从我与WCF合作已经有一段时间了,但最后我还记得它需要一个配置文件。你可以尝试另一种解决方案,如[ServiceStack](https://servicestack.net/)。他们有一个较老的开源版本,去下载并滚动到底部,我发现它很容易使用,它是免费的。 –

+0

XML可以放入HTML中的CData标签中。 – jdweng

回答

0

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

相关问题