servicestack,batching,C#,Request,servicestack,Batching" /> servicestack,batching,C#,Request,servicestack,Batching" />

C# 服务器上无法识别自动批处理请求

C# 服务器上无法识别自动批处理请求,c#,request,servicestack,batching,C#,Request,servicestack,Batching,我想尝试一下ServiceStack的功能。但它在服务器端似乎不起作用。 我有这样的服务: public class HelloService : Service { public object Any(HelloRequestDTO request) { return new HelloResponseDTO { Greetings = "Hello, " + request.Name }; } /// <summary>This

我想尝试一下ServiceStack的功能。但它在服务器端似乎不起作用。 我有这样的服务:

public class HelloService : Service
{
    public object Any(HelloRequestDTO request)
    {
        return new HelloResponseDTO { Greetings = "Hello, " + request.Name };
    }


    /// <summary>This method does not get invoked.</summary>
    public object Any(HelloRequestDTO[] requests)
    {
        return new HelloResponseDTO { Greetings = "Hello, " + string.Join(", ", requests.Select(r => r.Name).ToArray()) };
    }
}
当JSON序列化请求到达服务器时,会引发异常:

类型定义应以“{”开头,应为序列化类型“HelloRequestDTO”,获取的字符串应以:[{“Name”:“PersonA”}、{“Name”:“PersonB”}、{“Name”:“Pe”开头

我检查了请求是否有效,下面是我用Fiddler捕获的内容:

职位 HTTP/1.1

接受:application/json

用户代理:ServiceStack.NET客户端4038

接受编码:gzip,deflate

内容类型:application/json

主持人:MY-MACHINE:5667

内容长度:58

预期:100人继续

连接:保持活力

[{“姓名”:“个人”},{“姓名”:“个人”},{“姓名”:“个人”}]

当protobuf序列化请求到达时,只调用非数组处理程序(public object Any(HelloRequestDTO request))并且参数为“PersonC”,其他两个dto被丢弃

似乎我缺少了某种类型的开关,ServiceStack没有意识到它正在处理自动批处理请求


如果有帮助的话,我也可以上传我的测试解决方案。

ServiceClient中的url应该只包含ServiceStack实例的
BaseUrl
,而不是特定服务的url

将Url更改为:

var baseUrl = "http://{0}/api/".Fmt(host);
var protoClient = new ProtoBufServiceClient(baseUrl);
var jsonClient = new JsonServiceClient(baseUrl);
var requests = new[]
                           {
                               new HelloRequestDTO { Name = "PersonA" },
                               new HelloRequestDTO { Name = "PersonB" },
                               new HelloRequestDTO { Name = "PersonC" }
                           };

        const string host = "MY-MACHINE:5667";
        var serviceUrl = string.Format("http://{0}/api/hello?", host);

        var protoClient = new ProtoBufServiceClient(serviceUrl);
        var jsonClient = new JsonServiceClient(serviceUrl);

        //var protoResponses = protoClient.SendAll(requests);
        var jsonResponses = jsonClient.SendAll(requests);
var baseUrl = "http://{0}/api/".Fmt(host);
var protoClient = new ProtoBufServiceClient(baseUrl);
var jsonClient = new JsonServiceClient(baseUrl);