我使用WebService 2.0框架创建了一个.NET,这个类基于一个具有WebServiceAttribute的接口,并使用.NET和一个WebServiceAttribute文件托管它。WebService当前从一个XML文件加载其配置。
我想创建这个服务的多个实例,每个实例都加载自己的配置。
通过处理ASMX文件,我可以在完全相同的实现基础上,以不同的名称创建will服务的克隆。但是它也会加载完全相同的配置文件,这使得它变得非常无用。
因此,我的问题是:基于一个类创建任意数量的WebServices的最佳方法是什么,它们生活在一个IIS虚拟目录中,其中每个目录都加载不同的配置文件?
解决方案
在Pavel的回答的帮助下,我创建了以下代码来处理配置的加载:
public class WebConfigManager
{
public static T Load<T>() where T: new()
{
string location =
HttpContext.Current.Request.PhysicalPath + ".config";
if (HttpContext.Current.Cache[location] is T)
{
return (T)HttpContext.Current.Cache[location];
}
using (Stream s =
new FileStream(location, FileMode.Open, FileAccess.Read))
{
return (T)(HttpContext.Current.Cache[location] =
new XmlSerializer(typeof(T)).Deserialize(s));
}
}
}
// example of the usage of WebConfigManager
public class MyWebService : IMyWebService
{
Config config = WebConfigManager.Load<Config>();
...
发布于 2009-02-09 02:35:58
复制并粘贴.asmx文件以创建web服务的多个实例(例如Service1.asmx、Service2.asmx等)。
基于Context.Request.FilePath值的加载配置文件:
public string LoadConfig()
{
string configPath = Server.MapPath(this.Context.Request.FilePath + ".xml");
using (XmlReader reader = XmlReader.Create(configPath))
{
// Will read Service1.asmx.xml, Service2.asmx.xml and so on
}
}
发布于 2009-02-09 02:21:40
我建议将asmx放在不同的文件夹中,并在每个文件夹中放置一个web.config,并设置web服务的特定实例。这是一种简单快捷的方法。
或
您可以使用Web服务增强3.0并创建一个WSE路由器,将呼叫重定向到该路由器,并让路由器将调用转发到正确的web服务实例并传递附加配置。这是一种更复杂的方法,但它使您能够使用web服务的单个实例,即根据路由器传递的参数选择正确的配置。有关WSE3.0的更多信息,请向您介绍MSDN。
希望这能有所帮助!
https://stackoverflow.com/questions/527624
复制