我正在使用protobuf插件,我基本上拥有与示例完全相同的设置(我只是更改了代表我的域的东西,并为DTO添加了一些属性)。
我已成功创建该服务。当我使用以下方法调用webservice时,它运行并返回正确的数据: HTP:// MYSERVER:端口/帐户/ 02345432格式= X-protobuf的
但是,当我尝试以下列方式以编程方式连接到服务时:
var client = new ProtoBufServiceClient("htp://myserver:port");
var request = new GetAccount
{
AccountNumber = "02345432"
};
var result = client.Send<GetAccountResponse>("GET", "/Account", request);
我收到异常“处理程序未找到请求”
我在异常响应正文中注意到的是它尝试访问的URL是: HTP:// MYSERVER:端口/账户账户号码= 02345432
(是的,我故意使用htp来避免链接禁令)
显然我错过了一些东西。有人能指出我的错误吗?
@stefan我还阅读了“Winning with Rest&amp; ProtoBuf”,我基本上已经完成了该文章的内容。问题是文章永远不会展示如何使用ProtoBufServiceClient来使用web服务。我到达与文章完全相同的位置(我的webservice在浏览正确的URL时返回保存的二进制文件,其中包含正确的数据)。当我尝试你的建议做客户。获取&lt; ..&gt;(“/ Account / 02345432”)我得到一个不同的例外:无效的电线类型;
我发现错误,遗憾的是没什么令人兴奋的:PEBKAC。我忽略了将我返回的数据包装在我的ResponseDTO中,所以真的“无效的线型”应该让我知道。直到我开始逐行比较我发现了这一点。因此,通过序列化意外对象并返回它,服务堆栈通过我的精度不足而做得最好。不幸的是,另一端的客户期待一个AccountResponse DTO,而不是一个原始账户。
答案 0 :(得分:1)
也许其他人可以更好地回答这个问题,但我也会尝试回答它。
ServiceStack C# Client中的文档描述了REST API的文档 我们使用client.Get或client.Post。
如果您阅读ServiceStack测试中的代码,(项目ServiceStack.WebHost.Endpoints.Tests, ServiceStack.WebHost.IntegrationTests)你会看到一些例子
喜欢
var response = client.Get<MoviesResponse>("/cached/movies");
// or
var response = client.Post<ProtoBufEmail>( "/cached/protobuf",
new UncachedProtoBufEmail {
FromAddress = fromEmail
});
// or using the Send without Rest method
var response = client.Send<ProtoBufEmail>(request);
您还可以阅读有关#WINNING with C# ServiceStack: REST with ProtoBuf
的有用帖子我不确定,如果使用Get或Post,将解决您的问题。
错误“找不到请求处理程序”可能与您的路由有关。
正如您所写,您可以使用Uri“/ Account / 02345432”成功调用网络服务
你的Get方法应该是
var result = client.Get<GetAccountResponse>("/Account/02345432");