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; }
}