Web services servicestacksoap&;ToOptimizedResult客户端分析错误
我有一个超级简单的ServiceStack webservice,它是使用最新的Nuget包(我相信是3.8.3?)配置的。我所做的主要更改是调用Web services servicestacksoap&;ToOptimizedResult客户端分析错误,web-services,soap,
servicestack,Web Services,Soap,
servicestack,我有一个超级简单的ServiceStack webservice,它是使用最新的Nuget包(我相信是3.8.3?)配置的。我所做的主要更改是调用ResultContext.ToOptimizedResult(object)来压缩响应消息(如果调用客户端支持)。该服务的定义如下: public class PingService : BaseService<Ping> { protected override string OperationName { ge
ResultContext.ToOptimizedResult(object)
来压缩响应消息(如果调用客户端支持)。该服务的定义如下:
public class PingService : BaseService<Ping>
{
protected override string OperationName { get { return "Ping"; } }
protected override object Run(Ping request)
{
// Implementation removed for brevity
return new PingResponse();
}
protected override object OnAfterExecute(object response)
{
//return response;
return RequestContext.ToOptimizedResult(response);
}
}
var jsonClient = new JsonServiceClient("http://localhost/WebAppServiceV3/api");
var response = jsonClient.Send<PingResponse>(new Ping { LoginInfo = new ClientLoginInfo { UserName = "guest", Password = "guest", ClientPlatform = "TEST", ClientVersion = "1.3", InstanceUID = Guid.NewGuid().ToString() } });
Console.WriteLine(response.ToJson() + "\n");
var jsvClient = new JsvServiceClient("http://localhost/WebAppServiceV3/api");
response = jsvClient.Send<PingResponse>(new Ping { LoginInfo = new ClientLoginInfo { UserName = "guest", Password = "guest", ClientPlatform = "TEST", ClientVersion = "1.3", InstanceUID = Guid.NewGuid().ToString() } });
Console.WriteLine(response.ToJsv() + "\n");
var xmlClient = new XmlServiceClient("http://localhost/WebAppServiceV3/api");
response = xmlClient.Send<PingResponse>(new Ping { LoginInfo = new ClientLoginInfo { UserName = "guest", Password = "guest", ClientPlatform = "TEST", ClientVersion = "1.3", InstanceUID = Guid.NewGuid().ToString() } });
Console.WriteLine(response.ToXml() + "\n");
var soap11 = new Soap11ServiceClient("http://localhost/WebAppServiceV3/api");
response = soap11.Send<PingResponse>(new Ping { LoginInfo = new ClientLoginInfo { UserName = "guest", Password = "guest", ClientPlatform = "TEST", ClientVersion = "1.3", InstanceUID = Guid.NewGuid().ToString() } });
Console.WriteLine(response.ToXml() + "\n");
var soap12 = new Soap12ServiceClient("http://localhost/WebAppServiceV3/api");
response = soap12.Send<PingResponse>(new Ping { LoginInfo = new ClientLoginInfo { UserName = "guest", Password = "guest", ClientPlatform = "TEST", ClientVersion = "1.3", InstanceUID = Guid.NewGuid().ToString() } });
Console.WriteLine(response.ToXml() + "\n");
压缩打开(失败)
...
压缩关闭(成功)
...
有没有关于我在这里做错了什么的见解?提前感谢。我们以前遇到过这个问题,除了ServiceStack中的JSON序列化程序。。。必须显式指定返回类型:
protected PingResponse Run(Ping request)
{
// Implementation removed for brevity
return new PingResponse();
}
(例如,您不能使用对象
作为返回类型。)
我们反复尝试了所有不同的方法(dyanmic
、泛型等),而SerivTestack由于其数据契约性质,无法在全球范围内支持这些方法
我们最终要做的是为每种类型创建API方法,这些类型将使用泛型/简单对象(例如
RunPingResponse()
,RunOtherResponse()
,等等):(当前不支持SOAP压缩
您可以在提交问题以请求并跟踪此功能。这看起来与他的问题无关。将PingResponse DTO作为
对象返回有效。您不能像在代码示例中那样更改方法签名-ServiceBase.Run
返回一个对象。ServiceStack支持.NET 3.5,这就是为什么dynamic不支持.NET 3.5ork,generic有-但它可能被使用得很奇怪。问题创建于。谢谢mythz
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body>
<base64Binary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">...</base64Binary>
</s:Body>
</s:Envelope>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body>
<PingResponse>...<PingResponse>
</s:Body>
</s:Envelope>
protected PingResponse Run(Ping request)
{
// Implementation removed for brevity
return new PingResponse();
}