C#Web服务和使用变量

C#Web服务和使用变量,c#,wcf,web-services,C#,Wcf,Web Services,我需要使用c#中的WCF为多个web服务创建一个项目。web服务将调用其他程序集来执行核心处理。程序集将从SQL Server访问数据。每个web服务方法的一个参数将包括要使用的数据库。我的问题是如何将数据库参数传递给要使用的程序集。我无法更改要使用的所有附属程序集的所有签名。我想引用卫星汇编引用的某种变量。这些附属程序集与Windows窗体应用程序和ASP.NET应用程序一起使用,因此我需要所有类型的应用程序都可以使用。静态字段不好,因为对于一个web服务调用,数据库可能是“X”,而对于另一个

我需要使用c#中的WCF为多个web服务创建一个项目。web服务将调用其他程序集来执行核心处理。程序集将从SQL Server访问数据。每个web服务方法的一个参数将包括要使用的数据库。我的问题是如何将数据库参数传递给要使用的程序集。我无法更改要使用的所有附属程序集的所有签名。我想引用卫星汇编引用的某种变量。这些附属程序集与Windows窗体应用程序和ASP.NET应用程序一起使用,因此我需要所有类型的应用程序都可以使用。静态字段不好,因为对于一个web服务调用,数据库可能是“X”,而对于另一个web服务调用,数据库可能是“Y”。有什么想法吗?

这是一种可以很好地与IoC或DI框架配合使用的东西——有一些包含数据库信息的接口,并将其推送到所有调用方。即使没有IoC,将实现隐藏在接口中听起来也是一个可靠的计划


使用您的
静态
概念;
[ThreadStatic]
可能会工作,但有点麻烦(您需要认真清理调用方之间的数据),或者另一种选择是将一些信息存储在
主体上,因为这相对容易从WCF(每次调用)和winforms(通常是每个进程)进行配置。无论哪种情况,都要小心线程切换(异步等)。特别注意,ASP.NET可以在单页管道中间改变线程。你在这里做的任何事充其量都是一场恶作剧。我认为你在这里的最佳选择是开始重构,使用少量的SOA、IoC,也许是一个服务工厂,再解耦一点,并在其中加入一些流行语。认真地然后使用某种枚举或中性标识符来标识应该使用哪个数据存储库(数据库)(因为Web服务应该不知道是谁在调用它)。或者您可以只拥有多个Web服务实例,每个数据存储库一个,然后客户机只需调用相应的实例即可。只要您的客户端应用程序在其配置文件中声明指定了webservice内容,这将是微不足道的-如果它是硬编码的,那么您将被卷入:)+1重构和引入IoC等。是否有理由您“无法更改所有签名”?我同意重构。如果这不是一个选项,您可以使用thwat slugster建议的变体。仍然有一个Web服务接口供您的客户机使用。这个接口将包括他们应该连接的存储库。然后在内部,您可以拥有facades或其他Web服务,它们与数据库有更明确的连接。您的外部Web服务的主要目的是保证调用有效并将其路由到适当的facade。