servicestack,protobuf-net,C#,Rest,servicestack,Protobuf Net" /> servicestack,protobuf-net,C#,Rest,servicestack,Protobuf Net" />

C# 此ServiceStack Put方法有什么问题

C# 此ServiceStack Put方法有什么问题,c#,rest,servicestack,protobuf-net,C#,Rest,servicestack,Protobuf Net,客户端连接、发送和放置: var client = new JsvServiceClient(ConfigGlobal.Host); client.Put(new PiecParametrySzczegoloweRequest { Initialize = true, Config = _config }); 服务器接收到呼叫,但未看到初始化变量值设置为真: internal class PiecParametrySzczegoloweService : Service { publi

客户端连接、发送和放置:

var client = new JsvServiceClient(ConfigGlobal.Host);
client.Put(new PiecParametrySzczegoloweRequest { Initialize = true, Config = _config });
服务器接收到呼叫,但未看到
初始化
变量值设置为

internal class PiecParametrySzczegoloweService : Service
{
    public PiecParametrySzczegoloweResponse Put(PiecParametrySzczegoloweRequest request)
    {
        if (request.Initialize)
        {
            ImageFile.Initialize(request.Config);

            request.Initialize = false;

            return new PiecParametrySzczegoloweResponse { Initialized = true };
        }

        return null;
    }
}
请求看起来像:

[DataContract]
[Route("/PiecParametrySzczegolowe")]
public class PiecParametrySzczegoloweRequest : IReturn<PiecParametrySzczegoloweResponse>
{
    public bool Initialize { get; set; }

    public PiecParametrySzczegoloweLegend Config { get; set; }

    public int Percent { get; set; }
}
如果您需要序列化二进制数据(位图),请使用protobuf net(
var client=new ProtoBufServiceClient(ConfigGlobal.Host);
)并执行以下操作


如果您不想(需要)注释每个字段成员(阅读警告)

您需要删除
[DataContract]
属性,因为该属性告诉序列化程序您将使用
[DataMember]
属性指定要包含在序列化中的字段,但您尚未这样做

或者用
[DataMember]
标记您的属性

[DataContract]
[Route("/PiecParametrySzczegolowe")]
public class PiecParametrySzczegoloweRequest : IReturn<PiecParametrySzczegoloweResponse>
{
    [DataMember]
    public bool Initialize { get; set; }

    [DataMember]
    public PiecParametrySzczegoloweLegend Config { get; set; }

    [DataMember]
    public int Percent { get; set; }
}
[DataContract]
[路线(“/PiecParametrySzczegolowe”)]
公共类PiecParametrysCzegoLoweRequest:IReturn
{
[数据成员]
公共bool初始化{get;set;}
[数据成员]
公共PIECPARAMETRYSZCZEGOLOWERGEND配置{get;set;}
[数据成员]
公共整数百分比{get;set;}
}

您使用的是哪个版本的ServiceStack?我重新创建了您的服务,无法重现错误。对我来说,
Initialize
值被设置为
true
。当您在
if(request.Initialize)
行上设置断点时,是否正确设置了其他请求参数?你使用代理吗?尝试添加requestlog插件
Plugins.Add(newrequestlogsfeature())然后检查
/requestlogs
。我正在使用ServiceStack.3.9.68而不使用代理。我将尝试requestlog3.9.71是最新的BSD版本。但是,一旦您看到请求,您的问题可能会变得很清楚。@Scott更新到最新版本,
/requestlogs
显示连接保持活动内容-长度2内容-类型应用程序/jsv接受应用程序/jsv接受-编码gzip Expect 100继续主机localhost:1337,其他列(项目和持续时间除外)是空的。我想删除
[DataContract]
属性,因为您没有定义
[DataMember]
,所以它没有正确序列化对象。这是正确的,使用DataContract的makes字段选择加入。这里有一些其他的方法。
[DataContract]
[Route("/PiecParametrySzczegolowe")]
public class PiecParametrySzczegoloweRequest : IReturn<PiecParametrySzczegoloweResponse>
{
    [DataMember]
    public bool Initialize { get; set; }

    [DataMember]
    public PiecParametrySzczegoloweLegend Config { get; set; }

    [DataMember]
    public int Percent { get; set; }
}