ServiceStack能否模拟WCF响应

本文关键字:WCF 响应 模拟 ServiceStack | 更新日期: 2023-09-27 18:20:32

我正在试用ServiceStack,并喜欢迄今为止看到的内容。然而,我遇到了一堵砖墙。

我有一个通过web服务从另一个系统检索数据的系统,这是一个两端都有的服务。这两个系统来自不同的供应商,所以我无法控制更改它们,并且被配置为通过WCF web服务相互通信。假设"Lemon"打电话给"Orange"以获取有关客户的一些信息。

我们实现这两个系统的方式与供应商计划的略有不同——我们将他们的服务配置指向我们的中介服务——我们称之为"Peach"——它在返回信息之前会停止并做一些其他事情。例如,"Lemon"称其为"Orange",但实际上是我们的中介服务"Peach",使用相同的方法名称。"Peach"为客户信息调用"Orange",例如,在将所有信息适当组合并按预期格式返回给"Lemon"之前,用其他内容覆盖客户的电子邮件地址。

我想使用ServiceStack获得"Peach"。但是,它的响应需要与通过wsHttpBinding返回的WCF服务相同。ServiceStack可以做到这一点吗?它会涉及覆盖Soap 1.2类型吗?

谢谢你的帮助!

ServiceStack能否模拟WCF响应

如果ServiceStack的内置SOAP支持没有返回您想要的响应,您可能需要将您想要的确切SOAP响应作为原始string返回。

对WCF SOAP消息的原始访问

要访问服务中WCF的原始请求,您可以使用IRequiresSoapMessage接口告诉ServiceStack跳过请求的反序列化,而是将原始WCF消息传递给服务以进行手动处理,例如:

public class RawWcfMessage : IRequiresSoapMessage {
    public Message Message { get; set; }
}
public class MyServices : Service
{
    public object Post(RawWcfMessage request) { 
        var requestMsg = request.Message... //Raw WCF SOAP Message
    }
}

正在创建自定义WCF响应

通过创建自定义WCF消息响应并将原始输出作为字符串返回,可以进行某种程度的自定义,例如:

var wcfResponse = wcfServiceProxy.GetPeach(...);
var responseMsg = Message.CreateMessage(
   MessageVersion.Soap12, "urn:GetPeach", wcfResponse);
return responseMsg.ToString();

否则,您可能需要使用HTTP客户端(如HTTP Utils)将原始SOAP POST到WCF服务并返回原始字符串Response。

这个问题与WCF无关。WCF返回的不是WCF的构造,而是返回WS*标准指定的基于标准的响应。http://en.wikipedia.org/wiki/List_of_web_service_specifications列出了许多标准。

您的问题并不是让ServiceStack专门模仿WCF,而是让ServiceStack返回符合现有发布标准的响应。WCF已使用WsHttpBinding配置内置的标准。