将 XSD 存储在 WCF 网络服务中
Store XSD inside WCF webservice
我正在开发一个 WCF Web 服务,它始终且只接收 XML。
所以我需要使用他们的 XSD 验证输入 XML。问题是,我可以将它们保存在网络服务中吗?在本地,我可以通过相对路径访问我手动创建的 IIS Express 根文件夹中的 XSD 文件。我尝试在 VS 项目中添加 XSD 文件,但我无法在运行时找到它们。
我正在这样使用 Shemas:Image1 Link
IIS XSD'd 文件夹路径解决方法:Image2 Link
目前,它工作正常,问题是当我尝试在互联网上的某个地方部署服务时。
谢谢。
tl;dr:我可以在部署 Web 服务时发送一些 XSD 还是根本不可能?
一种方法是在您的配置文件中使用一个应用程序设置,该设置将包含一个基本文件位置,例如:
<appSettings>
<add key="BaseDir" value="C:\your\folder\names" />
</appSettings>
然后在你的程序中,当你需要一个文件时,你会做这样的事情:
string fileLocation = System.Configuration.ConfigurationManager.AppSettings["BaseDir"] +
@"\your\file\location\file.xsd";
要使用 System.Configuration.ConfigurationManager
,您需要添加对 System.Configuration
的引用。
您可以将 XSD 添加为资源,然后从程序集中加载它。将 XSD 添加到您的项目,并在 "Properties Explorer" 下,将 "Build Action" 设置为 "Embedded Resource"。然后您可以使用以下命令读取文件:
var schemaSet = new XmlSchemaSet();
schemaSet.Add("", XmlReader.Create(typeof(SomeClassInTheSameAssembly).Assembly
.GetManifestResourceStream("Full.Namespace.XsdName.xsd")));
有关更多信息,请参阅 Working with Embedded Resources or Loading XmlSchema files out of Assembly Resources。
属于您的解决方案的文件应该是物理上的一部分。一旦出现这种情况,当 WCF 服务是自托管时,您可以使用例如 HostingEnvironment.MapPath
; or look at the answers to this question. Note that there is a possible issue 和 HostingEnvironment.MapPath。
一个可能的解决方案是这个方法:
public static string MapPath(string path)
{
if (HttpContext.Current != null)
return HttpContext.Current.Server.MapPath(path);
return HostingEnvironment.MapPath(path);
}
参数 path
需要采用 "~/XSD/MyFile.xsd"
格式,文件夹 "XSD" 位于 WCF 服务的根目录中。
切勿在 c:\program files (x86)\iis express
中创建文件夹。
我正在开发一个 WCF Web 服务,它始终且只接收 XML。
所以我需要使用他们的 XSD 验证输入 XML。问题是,我可以将它们保存在网络服务中吗?在本地,我可以通过相对路径访问我手动创建的 IIS Express 根文件夹中的 XSD 文件。我尝试在 VS 项目中添加 XSD 文件,但我无法在运行时找到它们。
我正在这样使用 Shemas:Image1 Link
IIS XSD'd 文件夹路径解决方法:Image2 Link
目前,它工作正常,问题是当我尝试在互联网上的某个地方部署服务时。
谢谢。
tl;dr:我可以在部署 Web 服务时发送一些 XSD 还是根本不可能?
一种方法是在您的配置文件中使用一个应用程序设置,该设置将包含一个基本文件位置,例如:
<appSettings>
<add key="BaseDir" value="C:\your\folder\names" />
</appSettings>
然后在你的程序中,当你需要一个文件时,你会做这样的事情:
string fileLocation = System.Configuration.ConfigurationManager.AppSettings["BaseDir"] +
@"\your\file\location\file.xsd";
要使用 System.Configuration.ConfigurationManager
,您需要添加对 System.Configuration
的引用。
您可以将 XSD 添加为资源,然后从程序集中加载它。将 XSD 添加到您的项目,并在 "Properties Explorer" 下,将 "Build Action" 设置为 "Embedded Resource"。然后您可以使用以下命令读取文件:
var schemaSet = new XmlSchemaSet();
schemaSet.Add("", XmlReader.Create(typeof(SomeClassInTheSameAssembly).Assembly
.GetManifestResourceStream("Full.Namespace.XsdName.xsd")));
有关更多信息,请参阅 Working with Embedded Resources or Loading XmlSchema files out of Assembly Resources。
属于您的解决方案的文件应该是物理上的一部分。一旦出现这种情况,当 WCF 服务是自托管时,您可以使用例如 HostingEnvironment.MapPath
; or look at the answers to this question. Note that there is a possible issue 和 HostingEnvironment.MapPath。
一个可能的解决方案是这个方法:
public static string MapPath(string path)
{
if (HttpContext.Current != null)
return HttpContext.Current.Server.MapPath(path);
return HostingEnvironment.MapPath(path);
}
参数 path
需要采用 "~/XSD/MyFile.xsd"
格式,文件夹 "XSD" 位于 WCF 服务的根目录中。
切勿在 c:\program files (x86)\iis express
中创建文件夹。