【发布时间】:2013-03-24 08:08:37
【问题描述】:
我是服务堆栈的新手,已经苦苦挣扎了好几个小时,试图让服务堆栈为我工作。目前主要的表演障碍是我无法使异常部分起作用。我按本书注册了所有插件,服务适用于 REST、Soap、CSV、XML 和 JSV。该项目包含 4 种基本测试方法,用于对客户对象进行 crud 操作。抛出错误时,我没有收到预期的错误:未设置 ResponseStatus 并生成一般错误。有人可以帮我找出原因吗?
https://dl.dropbox.com/u/101619220/TestingServiceStack.zip
编辑:感谢您的评论:)
我创建了一个简单的 AppHost 文件:
命名空间测试服务堆栈 { 公共类 AppHost : AppHostBase { 公共应用主机() : base("StarterTemplate ASP.NET Host", typeof(CustomersService).Assembly) { }
public override void Configure(Container container)
{
Plugins.Add(new ValidationFeature());
Plugins.Add(new RequestLogsFeature());
SetConfig(new EndpointHostConfig
{
DebugMode = true, //Enable StackTraces in development
});
LogManager.LogFactory = new Log4NetFactory(true);
JsConfig.EmitCamelCaseNames = true;
JsConfig.DateHandler = JsonDateHandler.ISO8601;
Routes.Add<GetCustomers>("/customers", "GET")
.Add<GetCustomers>("/customers/{Id}", "GET")
.Add<AddCustomer>("/customers", "POST")
.Add<UpdateCustomer>("/customers/{Id}", "PUT")
.Add<DeleteCustomer>("/customers/{Id}", "DELETE");
}
public static void Start()
{
new AppHost().Init();
}
}
}
还有一项服务:
命名空间测试服务堆栈 { 公共类CustomersService:服务 { #region 日志记录
private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
#endregion
public object Any(GetCustomers request)
{
GetCustomersResponse response = null;
try
{
if (request.Id != "0")
throw HttpError.NotFound("Id {0} throws error".Fmt(request.Id));
response = new GetCustomersResponse {Id = request.Id ?? "notset", Name = "GetCustomers"};
}
catch (Exception ex)
{
Log.Error(base.RequestContext.Get<IHttpRequest>(), ex);
throw;
}
return response;
}
public object Any(AddCustomer request)
{
return new AddCustomerResponse {Id = request.Id, Name = "AddCustomer"};
}
public object Any(UpdateCustomer request)
{
return new UpdateCustomerResponse {Id = request.Id, Name = request.Name};
}
public object Any(DeleteCustomer request)
{
return new DeleteCustomerResponse {Id = request.Id, Name = "DeleteCustomer"};
}
}
}
而交换的对象是:
使用 System.Runtime.Serialization; 使用 ServiceStack.ServiceInterface.ServiceModel;
命名空间测试服务堆栈 { [数据合约] 公共类 GetCustomers { [数据成员] 公共字符串 ID { 获取;放; } }
[DataContract]
public class UpdateCustomer
{
[DataMember]
public string Id { get; set; }
[DataMember]
public string Name { get; set; }
}
[DataContract]
public class AddCustomer
{
[DataMember]
public string Id { get; set; }
[DataMember]
public string Name { get; set; }
}
[DataContract]
public class DeleteCustomer
{
[DataMember]
public string Id { get; set; }
}
[DataContract]
public class GetCustomersResponse : IHasResponseStatus
{
[DataMember]
public string Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public ResponseStatus ResponseStatus { get; set; }
}
[DataContract]
public class UpdateCustomerResponse : IHasResponseStatus
{
[DataMember]
public string Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public ResponseStatus ResponseStatus { get; set; }
}
[DataContract]
public class AddCustomerResponse : IHasResponseStatus
{
[DataMember]
public string Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public ResponseStatus ResponseStatus { get; set; }
}
[DataContract]
public class DeleteCustomerResponse : IHasResponseStatus
{
[DataMember]
public string Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public ResponseStatus ResponseStatus { get; set; }
}
}
我使用 SoapUi 调用 GetCustomers 方法,如果 id 等于 0,则会引发错误,我希望设置 ResponseStatus,但事实并非如此。从 SoapUi 调用时,出现以下错误:
我不知道如何正确设置响应状态,感谢任何提示。
【问题讨论】:
-
像这样放弃你的项目并没有什么帮助,只会让你想帮助你的人花费更多的时间。提出一个具体、清晰和简洁的问题,包括并粘贴代码的相关部分,并确切地解释您的问题是什么,即您尝试了什么以及您期望会发生什么。知道应该设计支持问题来建立知识库并帮助遇到类似问题的其他人。只是转储你的项目对这一切都没有帮助。如果其他人无法仅从问题描述中推断出您的问题,基本上不要指望他们会提供帮助。
-
问题更新远不足以回答这个问题,不要指望任何人打开你的项目,所以如果我们不能从问题中确定问题,它会去被忽略。 AppHost 定义没有解释错误是什么、您尝试了什么、您预期会发生什么以及实际发生了什么。
-
这是我在这里的第一篇文章,分两步完成。如果信息缺失,请告诉我。
-
问一个好问题不需要知道太多,只是不要假设其他人对您的具体问题一无所知,包括所有相关信息和上下文,并明确您的问题是。
-
我不确定我是否理解您的回答。我是否不应该期望 ServiceStack 可以与 SoapUi 一起使用——在这种情况下它是简单的纯肥皂交换?除了处理异常外,一切正常。我还阅读了关于 servicestack 中soap 的限制,如您所见,我从那里复制了很多代码。如果你能给我一个提示我在这里缺少什么,我仍然会非常感谢?
标签: servicestack