生成服务参考的麻烦

时间:2011-03-31 07:57:24

标签: wcf visual-studio-2010 .net-4.0 svcutil.exe

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

当我尝试在VS studio中添加“服务引用”时,我遇到了一些错误:

  

警告1自定义工具警告:无法导入wsdl:portType   详细信息:运行WSDL导入扩展时抛出异常:System.ServiceModel.Description.XmlSerializerMessageContractImporter   错误:找不到具有目标命名空间“http:// mycustomer / ws / types”的架构。   XPath到错误源:// wsdl:definitions [@ targetNamespace ='http:// mycustomer / ws / wsdl'] / wsdl:portType [@ name ='lbWebPT'] C:\ Projects \ mycustomerproject \ Service References \ ClientService \ Reference.svcmap

用于wsdl文件的portType,Binding和port元素的X3。

我猜这是因为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

1 个答案:

答案 0 :(得分:2)

我不喜欢使用项目服务引用,因为默认情况下代理生成器会插入。但是,如果您真的想为项目使用服务引用,那么您需要合并wsdl&的内容。将xsd文件转换为单个文件。服务引用UI假定生成代理所需的所有数据都在您提供的文件中。你发现SvcUtil更灵活。您应该能够将wsdl:import元素替换为包含xsd文件内容的wsdl:types元素(当然,不包含xml指令)。接下来,在“添加服务引用”对话框的地址文本框中输入文件的路径,您最好使用Visual Studio catered proxy goodness。