2011-03-31 52 views
2

我必须构建一个消耗大量Web服务的.Net应用程序。此Web服务在weblogic下运行。 Web服务的WSDL提到描述类型的XSD文件。生成服务参考的问题

当我尝试添加一个“服务引用”与VS工作室,我有一些错误:

Warning 1 Custom tool warning: Cannot import wsdl:portType Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter Error: Schema with target namespace 'http://mycustomer/ws/types' could not be found. XPath to Error Source: //wsdl:definitions[@targetNamespace='http://mycustomer/ws/wsdl']/wsdl:portType[@name='lbWebPT'] C:\Projects\mycustomerproject\Service References\ClientService\Reference.svcmap

X3的端口类型,绑定和WSDL文件的端口元素。

我猜测这是因为在xsd文件中定义的缺少类型。要解决这一错误,并且也避免了重复的代码,我在我的XSD文件运行以下命令(在预生成事件命令行):

"%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\bin\xsd.exe" "$(ProjectDir)xsdofmycustomer.xsd" /namespace:"MyCustomer.WebServices.Types" /c /o:"$(ProjectDir)."

此命令成功生产同类型和代码文件在XmlRootAttribute中定义了正确的名称空间。

这段代码已经放了一个专门的VS工程。我正在尝试引用该项目的服务引用项目。但是,错误仍在发生。

我能做些什么来解决我的问题? PS:我能够使用svcutil.exe pathtowsdl pathtoxsd部分解决我的问题,但我希望能够在VS中保持参考以便于使用。

THX

回答

2

我不使用,因为代理生成插入默认情况下,克鲁夫特的项目服务引用的粉丝。但是,如果您确实想要为项目使用服务引用,则需要将wsdl & xsd文件的内容合并到单个文件中。服务参考用户界面假定所有生成代理所需的数据都在您提供的文件中。当您发现SvcUtil更灵活。您应该能够用包含xsd文件内容的wsdl:types元素(当然不包含xml指令)替换wsdl:import元素。接下来,您在“添加服务引用”对话框的地址文本框中输入文件的路径,您应该非常乐意使用Visual Studio提供的代理服务器良好性。

+0

这是一个有趣的观点。我的问题是更新服务引用是在VS中单击一次。移动到批处理文件时,重建参考文件并不像看起来那么痛苦......我只是试图让代码和项目可供其他开发人员读取,以供将来的演变使用。 thx – 2011-03-31 14:51:21

+0

我喜欢基于ChannelFactory 的客户端代码,其中T是标有ServiceContract属性的接口。基于SvcUtil的代码将为您生成ServiceContract标记的接口和所有相关的DataContract标记的类。如果您不介意忽略SOA原则,则可以共享客户端和服务之间的实际服务合约组合,并将其用于T.我们编写的通用服务调用程序类负责处理服务调用并负责处理故障信道状况,当服务失败时。 – 2011-03-31 15:09:55

+0

通常不需要组合WSDL和XSD文件以使用“添加服务引用”,尽管在某些情况下这可能是必需的。 – 2014-02-14 02:24:01