Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WCF webservice中存储XSD_C#_Xml_Web Services_Wcf_Xsd - Fatal编程技术网

C# 在WCF webservice中存储XSD

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吗?或者这是不可能的?一

我正在开发一个WCFWeb服务,它始终只接收XML

因此,我需要使用XSD验证输入XML。问题是,我可以将它们保存在web服务中吗?在本地,我可以通过手动创建的IIS Express根文件夹的相对路径访问XSD文件。我尝试在VS项目中添加XSD文件,但在运行时找不到它们

我是这样使用Shemas的:

IIS XSD文件夹路径解决方法:

目前,它工作正常,问题是当我尝试在internet上的某个位置部署该服务时。
多谢各位


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);
}