2015-04-14 67 views
0

对于这个问题先行道歉,因为我知道这应该是非常简单的,但我是ServiceStack的全新,并没有找到我正在寻找的东西,仔细阅读ServiceStack wiki。通常我的问题是:如何通过网络访问ServiceStack服务?如何通过网络访问ServiceStack服务?

以下一些教程,我创建了使用以下语法创建一个新的ServiceStack客户端控制台应用程序:

var client = new ServiceStack.JsonServiceClient("http://localhost:51721"); 
var response = client.Post<FlightResponse>("/flights",new FlightRequest{ tfsUriString="http://10.0.1.8:8080/tfs/"}); 

我能够创建和接收DTO的,这一切都很好,很好,但现在我想在另一台计算机上运行控制台应用程序并在另一台计算机上运行该服务。我尝试弹出托管服务的计算机的URI,但当我这样做时,我收到WebServiceException - Bad Request。

我想也许如果我玩弄了我的Web.Config设置并修改了system.webServer配置我可以让它工作,但我仍然只是在WebServiceExceptions的时候才这样做。

任何人都可以阐明这一点吗?如何使用另一台计算机上托管的服务? MSDN Creating Cross Platform Applications是一个有用的读取,但它仍然使用相同的本地主机方法。它甚至有可能连接到另一台主机计算机上运行的服务(当然....?)

编辑:添加了一个链接到我的代码在GitHub上,如果有帮助!再次感谢Service Stack Example

+0

没有看到您的服务器代码,您还应该检查请求没有被客户端或服务器上的防火墙阻止。 – jklemmack

+0

如果您有时间查看,请提前添加一个链接到我的github上。我知道我会非常感激,我检查了我的防火墙,打开和关闭了它们,并且迄今没有任何运气。感谢您的回应! – UvrD

回答

0

您将以同样的方式访问ServiceStack服务,但是您也需要为ServiceStack服务添加路由,因为它会自动使用请求DTO上定义的路由,因此最好声明响应类型在请求DTO以及因此它并不需要是在每次调用网站,所以它应该是这样的:

[Route("/flights")] 
public class GetFlights : IReturn<FlightResponse> 
{ 
    public string tfsUriString { get; set; } 
} 

var client = new JsonServiceClient("http://localhost:51721"); 
var response = client.Post(new GetFlights { 
    tfsUriString = "http://10.0.1.8:8080/tfs/" 
}); 

如果你得到一个错误的请求,这通常是因为发送恶意请求,例如验证错误。在这些情况下,看看这对WebServiceException的错误信息,即你​​可以打印带有错误响应:

webEx.ResponseStatus.PrintDump(); 

而且在看看原始的HTTP请求和响应头也提供了很多有识之士的请求发生了什么问题。