小编Sha*_*ica的帖子

使用WCF的时区混乱

我的SaaS系统遍布全球,拥有多个客户.但是,每个客户端只在一个时区.客户端和我的中央服务器之间的通信使用WCF完成.

现在系统有一个调度方面,时间必须根据当地时间进行存储.但我发现当我发送一个标记有该DataContract属性DataMember的类,DateTime通过WCF接口具有类型属性时,系统变得过于聪明一半,并且它将时间转换为服务器时间.OTOH,如果我直接通过WCF接口传递DateTime值作为参数,则时间是逐字的,作为客户端时间.

这让我很头疼.有什么我可以在某处配置,以便WCF服务不会任何时间转换为本地(服务器)时间?

编辑:嗯,我不知道我做了什么,但我正在研究一些相关的东西,问题似乎只是消失了!所以我很想尝试你的答案,但我现在实际上无法重现我自己的问题......如果我有时间进行学术练习,我会更深入,但是现在,如果没有打破...

c# wcf timezone

6
推荐指数
1
解决办法
5747
查看次数

为什么Assembly.GetType()找不到我的类?

代码摘录:

var a = Assembly.LoadFile("MyAssembly.dll");
var t = a.GetType("MyNamespace.MyClass", false);
Debug.Assert(t != null); // fails
Run Code Online (Sandbox Code Playgroud)

Assembly.LoadFile()正在加载程序集没有任何问题,但Assembly.GetType()返回null,即使我已经验证MyNamespace.MyClass存在并正确拼写.

任何其他想法为什么会这样?

c# reflection

6
推荐指数
2
解决办法
4152
查看次数

版本之间的界面变化 - 如何管理?

这是我们在客户网站上遇到的一种相当不愉快的泡菜.客户端有大约100个工作站,我们在其上部署了产品"MyApp"的1.0.0版本.

现在,该产品所做的一件事是加载一个加载项(称之为"MyPlugIn",它首先在中央服务器上查找是否有更新的版本,如果是,则复制该文件在本地,然后它使用Assembly.Load并调用某个已知的接口加载加载项.这已经好几个月了.

然后客户想在某些机器上安装我们产品的v1.0.1(但不是全部).随之而来的是MyPlugIn的新版本.

但随后出现了问题.有一个共享DLL,由MyApp和MyPlugIn引用,称为MyDLL,它有一个方法MyClass.MyMethod.在v1.0.0和v1.0.1之间,MyClass.MyMethod更改了签名(添加了一个参数).现在新版本的MyPlugIn导致v1.0.0客户端应用程序崩溃:

找不到方法:MyClass.MyMethod(System.String)

客户端明确地不希望在所有客户端站点上部署v1.0.1,因为v1.0.1中包含的修复程序仅对少数工作站是必需的,并且不需要将其推广到所有客户端.遗憾的是,我们还没有(还)使用ClickOnce或其他大规模部署实用程序,因此推出v1.0.1将是一项痛苦而且不必要的练习.

有没有办法在MyPlugin中编写代码,以便它能够同样正常工作,无论它是处理MyDLL v1.0.0还是v1.0.1?也许在实际调用它之前,有一些方法可以使用反射来探测预期的接口,看它是否存在?

编辑:我还应该提一下 - 我们有一些非常严格的QA程序.由于QA已正式发布v1.0.1,因此我们不允许对MyApp或MyDLL进行任何更改.我们唯一的行动自由是更改MyPlugin,这是专门为该客户编写的自定义代码.

c# versioning plugins

6
推荐指数
1
解决办法
3536
查看次数

为什么我的ASP.NET MVC应用程序试图导航到login.aspx?

我有一个非常简单的"Hello World"级应用程序,我在ASP.NET MVC 4/Razor中构建.它在调试模式下工作正常.没有认证; 它直接进入Home/Index.

现在我将它发布到IIS.但是当我通过IIS查看它时,由于某种原因它正在尝试加载"login.aspx"表单.我没有定义任何这样的表单,不是在web.config中,而是在系统中的任何其他地方.无论我在URL中放置什么路径,它总是会重定向到不存在的login.apsx.

为什么?我如何解决它?

编辑:根据评论者的要求,这是我的Web.config:

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <sectionGroup name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection, DotNetOpenAuth.Core">
      <section name="messaging" type="DotNetOpenAuth.Configuration.MessagingElement, DotNetOpenAuth.Core" requirePermission="false" allowLocation="true" />
      <section name="reporting" type="DotNetOpenAuth.Configuration.ReportingElement, DotNetOpenAuth.Core" requirePermission="false" allowLocation="true" />
      <section name="openid" type="DotNetOpenAuth.Configuration.OpenIdElement, DotNetOpenAuth.OpenId" requirePermission="false" allowLocation="true" />
      <section name="oauth" type="DotNetOpenAuth.Configuration.OAuthElement, DotNetOpenAuth.OAuth" requirePermission="false" allowLocation="true" …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc iis-7 asp.net-mvc-4

6
推荐指数
2
解决办法
4845
查看次数

用于引用将Expression返回给另一个方法的方法的语法?

我找到了一段以下形式的代码:

public static Expression<Func<Invoice, CustomerContact>> GetCustomerContact()
{
   return i => new CustomerContact {
                 FirstName = i.Customer.FirstName,
                 LastName = i.Customer.LastName,
                 Email = i.Customer.Email,
                 TelMobile = i.Customer.TelMobile,
               };
}
Run Code Online (Sandbox Code Playgroud)

在代码的其他部分,我想获得相同的轻量级CustomerContact对象,但不是来自Invoice,而是来自Customer本身.因此,显而易见的事情是:

public static Expression<Func<Customer, CustomerContact>> GetCustomerContact()
{
   return c => new CustomerContact {
                 FirstName = c.FirstName,
                 LastName = c.LastName,
                 Email = c.Email,
                 TelMobile = c.TelMobile,
               };
}
Run Code Online (Sandbox Code Playgroud)

然后将Expressiontake Invoice作为输入更改为引用此方法,即如下所示:

public static Expression<Func<Invoice, CustomerContact>> GetCustomerContact()
{
   return i => GetCustomerContact(i.Customer); // doesn't compile
}
Run Code Online (Sandbox Code Playgroud)

这个的正确语法是什么?

.net c# linq expression expression-trees

6
推荐指数
1
解决办法
227
查看次数

StructureMap中的跨线程冲突

我有一个使用多个数据库分片的API应用程序,使用StructureMap进行依赖注入.每个API调用中所需的标头之一是a ShardKey,它告诉我此调用正在寻址的数据库.为了实现这一点,我有一个OwinMiddleware名为的类ShardingMiddleware,其中包含以下代码(为清晰起见,已剪切):

var nestedContainer = container.GetNestedContainer();
using (var db = MyDbContext.ForShard(shardKey)) // creates a new MyDbContext with connection string appropriate to shardKey
{
    nestedContainer.Configure(cfg => cfg.For<MyDbContext>().Use(db));
    await Next.Invoke(context);
}
Run Code Online (Sandbox Code Playgroud)

这在我的测试环境中运行良好,并通过了一系列集成测试.

但是集成测试实际上是单线程的.当我将其部署到QA环境中时,真正的应用程序通过多个同时呼叫击中我的API,事情开始变得梨形.Ferinstance:

System.ObjectDisposedException:无法访问已处置的对象.此错误的常见原因是处理从依赖项注入解析的上下文,然后尝试在应用程序的其他位置使用相同的上下文实例.如果您在上下文中调用Dispose()或将上下文包装在using语句中,则可能会发生这种情况.如果使用依赖项注入,则应该让依赖项注入容器负责处理上下文实例.

或者其他异常表明StructureMap没有MyDbContext可用的有效实例.

对我来说,似乎多个线程在某种程度上混淆了彼此的配置,但对于我的生活,我无法理解如何,因为我正在使用嵌套容器来存储每个API调用的数据库上下文.

有什么想法可能会出错吗?

更新:我还尝试将我的Db上下文抽象为一个接口.没有真正的区别; 我仍然得到错误

System.InvalidOperationException:尝试创建"SomeController"类型的控制器时发生错误.确保控制器具有无参数的公共构造函数.---> StructureMap.StructureMapConfigurationException:没有注册默认实例,无法自动确定类型'MyNamespace.IMyDbContext'

更新2:我解决了问题,但赏金仍然是开放的.请参阅下面的答案.

c# structuremap asp.net multithreading

6
推荐指数
1
解决办法
1126
查看次数

正则表达式负向后查找多个值

我想在我的日志中搜索异常情况。启动正则表达式:

\wException\b
Run Code Online (Sandbox Code Playgroud)

\w这样我可以捕获异常的名称,例如 InvalidOperationException,而不仅仅是“异常”一词,并且可以\b排除其他形式的异常,例如“SomeExceptionHandler”。)

这很有效,但我发现一个异常频繁出现,但我对此不感兴趣;我们就这么称呼它吧FooException。我更改了我的正则表达式以包含负面的lookbehind:

\w(?<!Foo)Exception\b
Run Code Online (Sandbox Code Playgroud)

太好了,现在“FooException”已被排除。现在我发现这BarException也产生了很多噪音,我也想排除它。所以我想我应该在lookbehind中尝试一个管道:

\w(?<!(Foo|Bar))Exception\b
Run Code Online (Sandbox Code Playgroud)

...但这被拒绝作为无效的正则表达式。

那么,如何在lookbehind中排除多个字符串呢?

regex

6
推荐指数
1
解决办法
6180
查看次数

如何使用Linq连接不同数据库中的表?

我有点像Linq新手,而且我找不到任何文档可以帮助我解决看似非常微不足道的问题 - 所以我们非常感谢您的帮助!

Table1在数据库中有一个表DB1,它在同一服务器上具有数据库Table2ID中表的"伪"外键."Pseudo",因为很明显我不能拥有跨越两个数据库的实际 FK.Table2DB2

现在我正在和O/R设计师一起玩,我喜欢将数据库对象带入设计师时生成所有关系的方式......非常酷!而且我希望我的Table1对象Table2与它有关系,就像它与所有"真正的"外键相关对象有关系一样DB1.但我无法Table2进入我的数据库图表,因为它在错误的数据库中.

合成本,我试图创建一个视图Table2DB1,这是根本select * from DB2..Table2.啊哈,现在我可以将一个Table2对象放入我的图表中.我甚至可以Table1和之间建立父/子关系Table2.但是当我查看生成的代码时,Table1仍然没有任何关系Table2,我觉得最令人困惑.

我在某处错过了一步吗?有没有更好的/推荐的方式这样做?

谢谢!


后来...

根据一个人的建议,我尝试通过复制同一个DB中相关对象的所有结构来填充Table1访问所需的所有方法的部分类Table2.

这实际上适用于读取,但是当我尝试更新或插入记录时,我得到了一个例外:

An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported.

所以看起来Linq的设计师实际上已经考虑过这种情况,并决定不允许 …

c# linq views or-designer linq-to-sql

5
推荐指数
1
解决办法
3200
查看次数

如何在Linq-to-SQL类上捕获Save或Load事件?

我有一个Linq-to-SQL类,我想在将记录持久保存到DB之前执行一些预先保存验证.此外,一旦保存,我想要一些后保存处理代码.

同样,当删除一条记录时,无论来自何处,我都希望调用前后方法context.SubmitChanges().

我没有在生成的代码中看到任何可以覆盖的方法.部分方法OnValidate()可能足以进行预处理,但是如果不满足某些条件,我希望能够取消保存,并且我没有看到任何钩子进行后处理.

我错过了什么吗?或者你能推荐另一种达到预期效果的方法吗?

谢谢!

c# linq linq-to-sql

5
推荐指数
1
解决办法
788
查看次数

离开加入Linq?

关于Linq中的Left连接已经有很多关于SO的问题,而我所看到的都使用join关键字来实现期望的结束.

这对我来说没有意义.比方说,我有表CustomerInvoice由外键链接CustomerIDInvoice.现在我想运行一份包含客户信息以及任何发票的报告.SQL将是:

select c.*, i.*
  from Customer c
  left join Invoice i on c.ID = i.CustomerID
Run Code Online (Sandbox Code Playgroud)

从我所看到的关于SO的答案,人们大多建议:

var q = from c in Customers
        join i in Invoices.DefaultIfEmpty() on c.ID equals i.CustomerID 
        select new { c, i };
Run Code Online (Sandbox Code Playgroud)

我真的不明白这是怎么回事.Customer和之间的关系Invoice已经由LinqToSQL类定义; 我为什么要为join条款重复一遍呢?如果我想要一个内部联接,它只会是:

var q = from c in Customers
        from i in c.Invoices
        select new { c, i };
Run Code Online (Sandbox Code Playgroud)

没有指定连接的字段!

我试过了:

var q = from c …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-sql

5
推荐指数
2
解决办法
1万
查看次数