我正在使用 protobuf 插件,我的设置基本上与示例完全相同(我只是重命名了一些东西以更好地代表我的域并向 DTO 添加了一些属性)。
我已经成功创建了服务。当我使用以下方法调用 Web 服务时,它会运行并返回正确的数据:htp://myserver:port/Account/02345432?format=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:port/Account?AccountNumber=02345432
(是的,我故意使用 htp 来避免链接禁令)
显然我错过了一些东西。有人可以指出我的方式错误吗?
编辑 1
@stefan 我还阅读了“Winning with Rest & ProtoBuf”,我基本上已经完全实现了那篇文章所做的事情。问题是这篇文章从来没有展示如何使用 ProtoBufServiceClient 来使用 web 服务。我到达了与文章完全相同的位置(当浏览正确的 url 时,我的 web 服务返回保存的二进制文件,其中包含正确的数据)。当我尝试执行您的建议时, client.Get<..>("/Account/02345432") 我得到一个不同的异常: Invalid wire-type;
编辑 2
我发现了错误,不幸的是没有什么令人兴奋的:PEBKAC。我忽略了将返回的数据包装在我的 ResponseDTO 中,所以“无效的线型”确实应该让我知道。直到我开始逐行比较时,我才发现了这一点。所以是的,服务堆栈通过序列化意外对象并返回它,在我缺乏精度的情况下尽了最大的努力。不幸的是,另一端的客户端期望的是 AccountResponse DTO,而不是原始帐户。