强制WCF WebService中的WSDL使用相对路径

时间:2016-06-15 15:37:31

标签: c# .net web-services wcf

有没有办法让我的WSDL中的模式位置相对而不是绝对?我一直在寻找解决方案,我一路上学习更多关于Wsdl的一代,但是我还没有找到我可以配置Wsdl这部分的地方(见突出显示)。

Partial WSDL Absolute Path

Partial WSDL Relative Path

我希望能让这成为一条相对的道路。

我相信可能有一种方法可以在webconfig中强制执行此操作,但我还没有能够在线找到解决方案。如果可能的话,任何帮助都会非常感激。如果不可能,我也会接受这个解决方案。谢谢!

1 个答案:

答案 0 :(得分:0)

对不起,迟到了。我被拉到一边以解决其他一些问题。因此,对于我的解决方案,我必须创建自己的WSDL并将其保存在本地。基本上你可以从WebService生成的那个开始,然后将其保存为.WSDL文件。编辑您的需求。如果你需要像我一样的相对路径,我只需添加相对路径并将其保存在webservice应用程序的根目录中。它就是这样的:

using the standard link http://localhost:52038/Service1.svc?wsdl
-<xsd:schema targetNamespace="http://tempuri.org/Imports">

   <xsd:import namespace="http://tempuri.org/"schemaLocation="http://localhost:52038/Service1.svc?xsd=xsd0"/>

   <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" schemaLocation="http://localhost:52038/Service1.svc?xsd=xsd1"/>

</xsd:schema> 

对于本地WSDL,我将schemaLocations保存并更改为相对路径,如下所示:

-<xsd:schema targetNamespace="http://tempuri.org/Imports">

   <xsd:import namespace="http://tempuri.org/" schemaLocation="xsd0.xsd"/>

   <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" schemaLocation="xsd1.xsd"/>

</xsd:schema>

然后我禁用了serviceMetaData&#39; httpGetEnabled = False&#39;在web.config中,因此WebService将不再生成WSDL。如果我现在要向消费者提供这个WSDL,我会给他们自定义本地WSDL的路径http://localhost:52038/Service1.wsdl

我确信在这个问题上还有更多可以说的,但我想分享我在这里所做的事情。免责声明,这只是关于某事物的一般POC的示例项目。谢谢!