C# 在WCF webservice中存储XSD
我正在开发一个WCFWeb服务,它始终只接收XML 因此,我需要使用XSD验证输入XML。问题是,我可以将它们保存在web服务中吗?在本地,我可以通过手动创建的IIS Express根文件夹的相对路径访问XSD文件。我尝试在VS项目中添加XSD文件,但在运行时找不到它们 我是这样使用Shemas的: IIS XSD文件夹路径解决方法: 目前,它工作正常,问题是当我尝试在internet上的某个位置部署该服务时。C# 在WCF webservice中存储XSD,c#,xml,web-services,wcf,xsd,C#,Xml,Web Services,Wcf,Xsd,我正在开发一个WCFWeb服务,它始终只接收XML 因此,我需要使用XSD验证输入XML。问题是,我可以将它们保存在web服务中吗?在本地,我可以通过手动创建的IIS Express根文件夹的相对路径访问XSD文件。我尝试在VS项目中添加XSD文件,但在运行时找不到它们 我是这样使用Shemas的: IIS XSD文件夹路径解决方法: 目前,它工作正常,问题是当我尝试在internet上的某个位置部署该服务时。 多谢各位 tl;dr:我可以在部署Web服务时发送一些XSD吗?或者这是不可能的?一
多谢各位
tl;dr:我可以在部署Web服务时发送一些XSD吗?或者这是不可能的?一种方法是在配置文件中使用一个应用程序设置,该设置将保存一个基本文件位置,例如:
<appSettings>
<add key="BaseDir" value="C:\your\folder\names" />
</appSettings>
要使用
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")));
有关更多信息,请参阅或。属于您的解决方案的文件应该是物理上的一部分。一旦这是你可以使用的情况下,例如;或者看看这些问题的答案。请注意,当WCF服务自托管时,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中创建文件夹
不确定我是否清楚这个问题。问题是如何在部署后访问XSD文件。在本地开发时,使用类似于您的解决方案的相对路径只是一种变通方法,因为我不会拥有自己将导出Web服务以添加文件夹的服务器。我建议使用来构造路径,而不是连接字符串。为什么要为一行代码添加屏幕截图?请使用编辑器向我们显示您的代码。此外,请向我们展示更多信息,例如,您如何构建通往XSD的路径,它们现在位于何处,等等。这仅仅是因为问题不符合最低要求。代码是无关的,我添加了一个tl;我想这很清楚。这可能就是你想要的。是的,我正在使用类似的东西。是的,我知道创建文件夹是一个糟糕的方法,但我不知道如何解决它。你的解决方案很有效。谢谢。:)
public static string MapPath(string path)
{
if (HttpContext.Current != null)
return HttpContext.Current.Server.MapPath(path);
return HostingEnvironment.MapPath(path);
}