提供接口实现而不是数据的服务

时间:2013-07-31 15:28:08

标签: web-services interface servicestack

一段时间以来,我正在尽可能使用ServiceStack(或WebAPI)而不是WCF来实现服务。

我现在要做的是将一个接口(-name)发送到服务器并返回一个类实现。也许那令人困惑,所以我会给你一个例子:

我的服务客户端有多个操作 - 例如“检查表单”: 检查此表单的逻辑未实现。它有一个名为IFormChecker的界面,其方法如NameIsValid(string firstName, string middleName, string lastName)

客户端将从服务器请求实现IFormChecker,而不是将整个表单数据发送到服务器进行验证。

我知道WCF可以实现,但我不知道如何使用ServiceStack。 如果可能的话,那么该怎么办?我检查了文档,但我并不是很明智。

1 个答案:

答案 0 :(得分:1)

它接缝就像没有“魔术”或任何东西。 我必须序列化/反序列化“旧时尚方式”这个类。

如果您有兴趣,这是解决方案:

我创建了一个“根” - 接口,在这个例子中它是IModule。 这个IModule只包含一个名为Name的属性。 这是一个字符串,只是为了方便起见:

示例中的IFormChecker将从此接口派生: 我的客户端知道这个Name-property的值,当然还有接口本身。 它现在将激活Name-value到服务器,它将返回序列化类。

我所要做的就是:

var module = ModuleImplementations.FirstOrDefault(x => x.Name == name);
if(module == null) throw new SomeException();

return module.Serialize();

客户端方面我可以反序列化它并将其转换为接口。就是这样。

这是我的ModuleSerialization-Class:

public static class ModuleSerialization
{
    public static string Serialize(this IModule m)
    {
        using (var ms = new MemoryStream())
        {
            var bf = new BinaryFormatter();
            bf.Serialize(ms, m);

            return Convert.ToBase64String(ms.ToArray());
        }
    }

    public static T Deserialize<T>(string serialized) where T : class, IModule
    {
        var ba = Convert.FromBase64String(serialized);

        using (var s = new MemoryStream(ba))
        {
            var bf = new BinaryFormatter();
            return bf.Deserialize(s) as T;
        }
    }
}

干杯!

相关问题