【问题标题】:Store XSD inside WCF webservice将 XSD 存储在 WCF Web 服务中
【发布时间】:2015-01-10 00:39:40
【问题描述】:

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

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

我正在使用这样的 Shemas:Image1 Link

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

目前,它工作正常,问题是当我尝试在互联网上的某个地方部署该服务时。
谢谢。

tl;dr:我可以在部署 web 服务时发送一些 XSD 吗?或者这是不可能的?

【问题讨论】:

  • 为什么要为一行代码添加截图?请使用编辑器向我们展示您的代码。此外,向我们展示更多信息,即如何构建 XSD 的路径,它们现在位于何处等。
  • 仅仅是因为这个问题不符合最低要求。代码无关紧要,我添加了一个 tl;博士猜它很清楚。
  • 这可能是你在stackoverflow.com/questions/17166667/…之后的样子
  • 是的,我正在使用类似的东西。

标签: c# xml web-services wcf xsd


【解决方案1】:

属于您的解决方案的文件应该是物理上的一部分。一旦出现这种情况,您可以使用例如HostingEnvironment.MapPath;或查看this question 的答案。请注意,当 WCF 服务自托管时,有 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 中创建文件夹。

【讨论】:

  • 是的,我知道创建文件夹是一种不好的方法,但我不知道如何解决它。您的解决方案就像一个魅力。谢谢你。 :)
【解决方案2】:

您可以将 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 ResourcesLoading XmlSchema files out of Assembly Resources 了解更多信息。

【讨论】:

    【解决方案3】:

    您可以做到这一点的一种方法是在配置文件中使用应用程序设置,该设置将保存基本文件位置,例如:

    <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 的引用。

    【讨论】:

    • 不确定我是否清楚 que 问题。问题是如何在部署后访问 XSD 文件。在本地开发时,使用像您的解决方案这样的相对路径只是一种解决方法,因为我不会拥有我将导出 Web 服务以自己添加文件夹的服务器。
    • 我建议使用Path.Combine 来构造路径而不是连接字符串。
    猜你喜欢
    • 2013-09-03
    • 1970-01-01
    • 2014-08-23
    • 2017-04-19
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    相关资源
    最近更新 更多