我有一个 servicestack 服务,当通过浏览器 (restful) Url ex: 调用它时http://localhost:1616/myproducts
,它工作正常。服务方法启用了 RedisCaching。因此,它第一次访问数据存储库并将其缓存以供后续使用。
我的问题是当我尝试通过 Soap12ServiceClient 从 ac# 客户端调用它时。它返回以下错误:
Error in line 1 position 183. Expecting element '<target response>'
from namespace 'http://schemas.datacontract.org/2004/07/<target namespace>'..
Encountered 'Element' with name 'base64Binary',
namespace 'http://schemas.microsoft.com/2003/10/Serialization/'.
以下是我的客户代码:
var endpointURI = "http://mydevelopmentapi.serverhostingservices.com:1616/";
using (IServiceClient client = new Soap12ServiceClient(endpointURI))
{
var request = new ProductRequest { Param1 = "xy23432"};
client.Send<ProductResponse>(request);
}
似乎使用的soapwsdl给出了问题,但我似乎使用了servicestack生成的默认值。
任何帮助都感激不尽。
更新
通过更改服务端的缓存代码,我能够克服此错误:
在客户端返回错误的代码:
return RequestContext.ToOptimizedResultUsingCache(this.CacheClient, cacheKey,
() =>
new ProductResponse(){CreateDate = DateTime.UtcNow,
products = new productRepository().Getproducts(request)
});
现在有效的代码:
var result = this.CacheClient.Get<ProductResponse>(cacheKey);
if (result == null)
{
this.CacheClient.Set<ProductResponse>(cacheKey, productResult);
result = productResult;
}
return result;
但是我仍然很想知道为什么第一个方法(RequestContext.ToOptimizedResultUsingCache)在c#客户端返回错误?