【发布时间】:2013-12-16 22:22:35
【问题描述】:
客户端连接,发送Put:
var client = new JsvServiceClient(ConfigGlobal.Host);
client.Put(new PiecParametrySzczegoloweRequest { Initialize = true, Config = _config });
服务器收到调用,看不到Initialize变量值设置为true:
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; }
}
编辑:
缺少属性,谢谢!并且(同时解决的问题)...
如果你需要 /requestlogs 而你没有授权使用:
Plugins.Add(new RequestLogsFeature() { RequiredRoles = new string[0] });
如果您需要序列化二进制数据(位图),请使用 protobuf-net (var client = new ProtoBufServiceClient(ConfigGlobal.Host);) 并执行类似 Serialize a Bitmap in C#/.NET to XML 的操作
如果您不想(需要)注释每个字段成员(阅读警告)Protobuf-net serialization without annotation
【问题讨论】:
-
您使用的是什么版本的 ServiceStack?我重新创建了您的服务,但无法重现该错误。
Initialize值对我来说设置为true。当您在if(request.Initialize)行上断点时,其他请求参数是否设置正确?你使用代理吗?尝试添加请求日志插件Plugins.Add(new RequestLogsFeature());,然后检查/requestlogs。 -
我正在使用没有代理的 ServiceStack.3.9.68。我会尝试请求日志
-
3.9.71 是最新的 BSD 版本。但是,一旦您看到请求,您的问题可能会变得清晰。
-
@Scott 更新到最新,
/requestlogs显示 Connection Keep-Alive Content- Length 2 Content- Type application/jsv Accept application/jsv Accept- Encoding gzip Expect 100-continue Host localhost:1337, other列(项目和持续时间除外)为空。 -
我突然想到删除
[DataContract]属性,因为您没有定义[DataMember]s,所以它没有正确序列化对象。
标签: c# rest servicestack protobuf-net