如何在WCF Web服务应用程序中引用文件
本文关键字:引用 引用文 文件 应用程序 服务 WCF Web | 更新日期: 2023-09-27 18:21:29
这些年来,我参与了一些C#项目,通常项目类型与项目类型之间的规则是一致的。但是,在启动了一个WCF Web服务项目后,我发现情况有所不同。我必须将传入的XML验证为模式。我在项目根目录XSD中创建了一个文件夹,用于存储模式。在以前的项目中,当引用文件夹中的XSD时,我使用了这样的东西:
XmlTextReader textReader = null;
XmlSchemaCollection xSchemaCollection = null;
XmlValidatingReader valReader = null;
string uri = string.Format(@"{0}'{1}", Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), XSDPath);
// text reader object
textReader = new XmlTextReader(uri);
xSchemaCollection = new XmlSchemaCollection();
xSchemaCollection.Add(null, textReader);
// XML validator object
valReader = new XmlValidatingReader(strXMLDoc, XmlNodeType.Document, null);
XSD文件的属性设置为"始终复制到目标文件夹"。通常情况下,我会得到一个有效的XSD路径,一切都很顺利。但在这个WCF Web服务项目中,XSD文件复制到的路径是一个临时目录,我没有得到有效的路径。xSchemaCollection.Add方法失败。
顺便说一句,XSD文件夹目前不在WCF项目中。我添加了一个类库项目(上面的代码当前驻留在其中),这就是文件夹和文件所在的位置。我本以为这可以消除临时目录问题,但事实并非如此。
你知道我做错了什么吗?提前谢谢。
WCF是一个非常强大的框架,但WCF的核心概念之一是服务定义是从通信通道的实现细节中抽象出来的。这意味着WCF服务不知道使用什么XSD文件来描述其内容,甚至不知道是否使用XSD文件(服务绑定不一定使用SOAP)。
如果您试图遵循现有的协议,或者如果您试图自定义复杂协议的一个方面,其中协议的其他方面都符合web标准,WCF的工作非常好。然而,听起来你所做的事情比这更糟糕。
如果您发现必须以非标准的方式直接处理SOAP消息,WCF可能不是该工作的最佳工具。我建议您考虑使用其他服务实现策略,例如HttpHandler或一个好的旧asmx文件。基于Asmx的web服务远不如WCF复杂,但正是这种缺乏复杂度的情况使它们在非标准协议方面更加灵活。
我认为,如果出于某种原因,您在通过文件系统访问XSD时遇到问题,那么我很可能会将它们作为资源嵌入到程序集中。然后你所要做的就是使用一个自定义解析器(从声音上看,这些XSD似乎没有使用includes/imports;如果它们使用了,自定义解析器肯定是可行的)。。。