我试图在一个新的monodroid项目中引用servicestack dll,我遇到了构建错误.
我从这里抓住了dll:
https://github.com/ServiceStack/ServiceStack/tree/master/release/latest/MonoDroid
我收到了错误
/Library/Frameworks/Mono.framework/Versions/2.10.9/lib/mono/4.0/Microsoft.Common.targets:警告:发现之间存在冲突:'mscorlib,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e '和'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'.使用'mscorlib,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e'参考.
关于如何修复的任何建议?
本周我获准学习ServiceStack.我喜欢它.这是一个了不起的框架.但是我遇到了一个我无法得到一个相当直接的例子来工作的情况.(虽然它确实不像示例那样简单,但可能是更现实的一个例子.)
为这个长期问题提前道歉.
我有一个简单的DTO映射到这样的数据库......
[Description("Customer")]
[Alias("Customers")]
public class Customer : IHasId<int>
{
[Alias("Id")]
[AutoIncrement]
public int Id { get; set;}
[Required]
public int CompanyId { get; set;}
[Required]
public string FirstName { get; set;}
[Required]
public string LastName { get; set;}
public string MiddleInitial { get; set;}
public string EmployerName { get; set;}
public string ServiceLocationDescription { get; set;}
public string Street1 { get; set;}
public string Street2 { get; set;}
public string City { get; set;}
public string State { …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ServiceStack.Redis,我注意到当我存储一个对象的成员是从另一个对象继承的对象并尝试稍后获取它时,我得到null.
我查了一下,发现ServiceStack.Redis正在使用ServiceStack.JsonSerializer,所以我试图创建一个测试用例:
class Program
{
public class ClassA
{
public string Id;
public Dictionary<string, ClassB> dic = new Dictionary<string, ClassB>();
}
public class ClassB
{
public string Id;
}
public class ClassC : ClassB
{
public object C;
}
public class ClassD
{
public string Id;
}
static void Main(string[] args)
{
ClassA t = new ClassA();
t.Id = Guid.NewGuid().ToString("n");
t.dic.Add("AAA", new ClassC());
t.dic["AAA"].Id = Guid.NewGuid().ToString("n");
((ClassC)t.dic["AAA"]).C = new ClassD();
((ClassD)((ClassC)t.dic["AAA"]).C).Id = Guid.NewGuid().ToString("n");
ServiceStack.Text.JsConfig.IncludeNullValues = true;
ServiceStack.Text.JsConfig.IncludePublicFields = true;
ServiceStack.Text.JsConfig.IncludeTypeInfo …Run Code Online (Sandbox Code Playgroud) 免责声明:我对ServiceStack很新
鉴于以下服务:
public class TestService : Service
{
public TestResponse Get(Test request)
{
if (String.IsNullOrEmpty(request.Message))
throw new ArgumentException("Message is required");
return new TestResponse();
}
}
Run Code Online (Sandbox Code Playgroud)
和以下请求/响应DTO:
[Route("/test", "GET")]
public class Test : IReturn<TestResponse>
{
public string Message { get; set; }
}
public class TestResponse
{
public IList<Test> TestList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我尝试访问/测试时,我希望得到以下响应:
{
"responseStatus": {
"errorCode": "ArgumentException",
"message": "Message is required",
"errors": []
}
}
Run Code Online (Sandbox Code Playgroud)
相反,我得到一个空的JSON响应.然而,它返回正确的状态代码(400 Bad Request).
我认为在ServiceStack中使用Something然后SomethingResponse以这种方式命名您的DTO是很常见的.为了让它将异常作为序列化的ResponseStatus对象返回,我发现我可以将我的请求DTO从Test重命名为TestRequest和/或在我的响应DTO中包含ResponseStatus属性.
这是预期的行为吗?
更新
我应该包括只有在我的响应DTO的名称以Response结尾(区分大小写)时才会出现问题.如果我的请求/响应DTO分别被称为Foo和Bar,我会收到错误的格式正确的JSON响应.
我正在尝试在ServiceStack中使用FluentNHibernate和Funq IoC容器,基于每个请求的会话,我遇到了一个问题,在第二次请求我的服务时,我得到一个ObjectDisposedException.Funq不应该为每个请求创建一个新的Session吗?
我的理解是,通过在Funq中使用ReusedWithin(ReuseScope.Request),每个请求都会得到一个新的ISession,但这只发生在第一个请求中.在我的AppHost中,我有以下内容:
public static NH.ISession CurrentSession
{
get
{
SessionFactory = GetFactory();
NH.ISession session = SessionFactory.OpenSession();
return session;
}
}
private static NH.ISessionFactory GetFactory()
{
return Fluently.Configure().Database(MsSqlConfiguration.MsSql2008
.ConnectionString(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString)).Mappings(m =>
{ m.FluentMappings.AddFromAssemblyOf<Case>(); })
.BuildSessionFactory();
}
Run Code Online (Sandbox Code Playgroud)
并注册容器:
container.Register<NH.ISession>(c => CurrentSession).ReusedWithin(Funq.ReuseScope.Request);
container.Register<ILog>(c => LogManager.GetLogger(GetType()));
Run Code Online (Sandbox Code Playgroud) 我关心的主要是ServiceStack的Redis客户端.我有一堆实体要存储在缓存中.他们的成员大多是封装的(私有的),其中一些没有任何公共访问者.ServiceStack的序列化程序是否允许我在Redis中存储(并显然获得)这些实体?或者我是否必须创建具有序列化公共属性的"干净"POCO类,这将迫使我保留任何实体的2个表示形式:真实的,以及用于将其存储在Redis中的"假"POCO表示形式?
我希望答案不是后者:)
我热衷于使用ServiceStack并使用简单的客户服务创建了一个小测试应用程序:
[Route("/customers/{id}")]
public class GetCustomer : IReturn<Customer>
{
public int Id { get; set; }
}
[Route("/customers/search")]
public class FindCustomers : IReturn<List<Customer>>
{
public string LastName { get; set; }
public int Age { get; set; }
public string? City { get; set; }
}
public class CustomerService : IService
{
public object Get(GetCustomer request)
{
var db = new WebServDb();
var customer = db.FirstOrDefault<Customer>("WHERE Id=@0", request.Id);
return customer;
}
public object Get(FindCustomers request)
{
var db = …Run Code Online (Sandbox Code Playgroud) 我们正在使用ServiceStack创建一个Web服务(当前的v3-fixes分支),另一家公司正在针对它编写Android和iOS应用程序.
我的DTO(当然)是在单独的程序集中并针对.Net Framework 4进行编译.我可以在.Net项目和Xamarin.Android项目中使用这些程序集而不会出现问题.另一家公司现在告诉我,他们不在Xamarin.iOS工作.
他们使用版本3.9.55的最新(预编译)ServiceStack.MonoTouch dll.我在某处读到了我必须针对ServiceStack dll的MonoTouch版本编译我的DTO.
这是正确的,是否可以在Windows环境中执行此操作?
在此先感谢Steffen
我一直在审查ServiceStack.OrmLite.SqlServer库,它工作得很好,但我们正在查看生成的SQL,我们想在我们的select语句中添加一个nolock提示但是找不到任何相关的文档?
当前:
exec sp_executesql N'SELECT "GroupID", "Name", "ShortName", "GroupTypeID", "ParentGroupId" FROM "Group" WHERE "GroupID" = @GroupID',
N'@GroupID int', @GroupID = 5543
Run Code Online (Sandbox Code Playgroud)
想:
exec sp_executesql N'SELECT "GroupID", "Name", "ShortName", "GroupTypeID", "ParentGroupId" FROM "Group" **WITH (NOLOCK)** WHERE "GroupID" = @GroupID',
N'@GroupID int', @GroupID = 5543
Run Code Online (Sandbox Code Playgroud)
有人知道怎么做吗?
我们正在尝试将ServiceStack与我们的ASP.NET MVC 5应用程序一起使用.
因此最终用户将使用充分利用的Web应用程序ASP.NET MVC.
我们想要发布一组API,以便我们的旧系统可以与新系统通信.
新系统利用SimpleInjector IoC将整个应用程序粘合在一起.
我已安装ServiceStack.Mvc但无法让它工作.
我尝试过以下链接:https://github.com/ServiceStack/ServiceStack/wiki/Mvc-integration
我认为这是因为ServiceStack它内置了IoC与之相冲突的内容SimpleInjector.
这是我的 Application_Start
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Bootstrap.Configure();
#region Initialize SimpleInjector
var container = new Container();
InitializeContainer(container);
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.RegisterMvcIntegratedFilterProvider();
container.Verify();
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
#endregion
new AppHost().Init();
}
Run Code Online (Sandbox Code Playgroud)
这是我的 AppHost
public class AppHost : AppHostBase
{
public AppHost() : base("MVC 5", typeof(MyServices).Assembly) { }
public override void Configure(Container container)
{
SetConfig(new …Run Code Online (Sandbox Code Playgroud) asp.net-mvc web-services ioc-container servicestack simple-injector
servicestack ×10
c# ×2
web-services ×2
asp.net-mvc ×1
funq ×1
json ×1
monodevelop ×1
redis ×1
xamarin.ios ×1