2012-02-16 12 views
0

ServiceDescriptionImporterを使用しているときに問題を克服する方法を知っている人がいるのでしょうか。 WebサービスWSDLに型スキーマが埋め込まれている場合、WSDLにインポートが含まれている場合、次のコードは型定義を見つけることができないというエラーを生成しますが、CodeDOMを使用して動的にWebサービスクライアントプロキシを生成しています。 Web上でいくつかの調査を行い、スキーマをインポータに追加するためのコードを追加しましたが、インポートされたWSDLのプロキシを作成するときにエラーが発生します。ServiceDescriptionImporterがWebサービスネームスペースの定義を見つけることができません

Stream stream = client.OpenRead(wsURL); 

ServiceDescription description = ServiceDescription.Read(stream); 

ServiceDescriptionImporter importer = new ServiceDescriptionImporter(); 

importer.ProtocolName = "Soap12"; // Use SOAP 1.2. 

importer.AddServiceDescription(description, null, null); 

// Add any imported files 
foreach (System.Xml.Schema.XmlSchema wsdlSchema in description.Types.Schemas) 
{ 
    foreach (System.Xml.Schema.XmlSchemaObject externalSchema in wsdlSchema.Includes) 
    { 
     if (externalSchema is System.Xml.Schema.XmlSchemaImport) 
     { 
      Uri baseUri = new Uri(wsURL); 
      Uri schemaUri = new Uri(baseUri, ((System.Xml.Schema.XmlSchemaExternal)externalSchema).SchemaLocation); 
      stream = client.OpenRead(schemaUri); 
      System.Xml.Schema.XmlSchema schema = System.Xml.Schema.XmlSchema.Read(stream, null); 
      importer.Schemas.Add(schema); 
     } 
    } 
} 

importer.Style = ServiceDescriptionImportStyle.Client; 

importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties; 

CodeNamespace nmspace = new CodeNamespace(); 
CodeCompileUnit unit1 = new CodeCompileUnit(); 

unit1.Namespaces.Add(nmspace); 

// This is generating the error: 
ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1); 

エラーが受信:

は 'XYZ' の定義を見つけることができません。名前空間 'xyz'のサービス記述がありません。 パラメータ名:

WSDL名前:

<?xml version="1.0" encoding="UTF-8"?> 
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://www.ibm.com/maximo" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.ibm.com/maximo" xmlns:i0="http://www.ibm.com/maximo/wsdl/UWMFO_UWMFO_BB_Interface" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:s="http://www.w3.org/2001/XMLSchema"> 
<wsdl:import location="http://localhost/MaximoWS/MessageService.asmx?wsdl=wsdl1" namespace="http://www.ibm.com/maximo/wsdl/UWMFO_UWMFO_BB_Interface"/> 
<wsdl:types> 
    <s:schema targetNamespace="http://www.ibm.com/maximo"> 
    <s:include schemaLocation="http://localhost/MaximoWS/MessageService.asmx?schema=schema1"/> 
    </s:schema> 
</wsdl:types> 
<wsdl:service name="MessageService"> 
    <wsdl:port name="UWMFO_UWMFO_BB_InterfaceSOAP12Binding" binding="i0:UWMFO_UWMFO_BB_InterfaceSOAP12Binding"> 
    <soap:address location="http://localhost/MaximoWS/MessageService.asmx"/> 
    </wsdl:port> 
    <wsdl:port name="UWMFO_UWMFO_BB_InterfaceSOAP12Binding1" binding="i0:UWMFO_UWMFO_BB_InterfaceSOAP12Binding1"> 
    <soap12:address location="http://localhost/MaximoWS/MessageService.asmx"/> 
    </wsdl:port> 
</wsdl:service> 
</wsdl:definitions> 

どうもありがとうございました

+0

あなたが失敗したWSDLの例を持っていますか? – svick

+0

こんにちはsvick、以下はwsdl: – JerryH

+0

です。質問を編集してそこにWSDL(またはそこへのリンク)を追加することができます。 – svick

答えて

0

を、私は同様の問題を抱えていたポストを見つけました:

ServiceDescription Importer and Import directives in the root WSDL

問題がいるようです外部のチェックをコメントアウトすると、このWSDLで解決されます。 chemaオブジェクトとコードのポストで使用:

if (externalSchema is XmlSchemaImport) 

私はなぜこの作品は、誰が知っているのですか?

3

この(servicedescriptionimporter)は4.0の.netフレームワークにはありません。 することができますので、Visual Studio 2012にアップデートしてください(.NET Framework 4.5には最低限必要)。

ヘルプ :: http://msdn.microsoft.com/en-us/library/system.web.services.description.servicedescriptionimporter.aspx

+1

PS私は知っていて、リンクを通してベンを持っています: http://social.msdn.microsoft.com/Forums/vstudio/en-US/39138d08-aa08-4c0c-9a58-0eb81a672f54/adding-a-web-reference - 動的 - 時 - 実行時 – Sid

関連する問題