0

我正在使用 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,而不是原始帐户。

4

1 回答 1

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" 成功调用 Web 服务

你的 Get 方法,应该是

          var result = client.Get<GetAccountResponse>("/Account/02345432");

也许这个Designing a REST-ful service with ServiceStack 也很有帮助。

于 2013-09-21T00:56:44.603 回答