Infopath 2003'te bir ADO.NET dataset döndüren bir Web hizmetinden bir form oluşturamıyor

Makale çevirileri Makale çevirileri
Makale numarası: 822020 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makalenin Microsoft Visual Basic .NET sürümü için bkz: 831795.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

ınfopath formu (System.Data.DataSet) bir <a0>ADO.NET DataSet döndüren bir Web hizmetinden oluşturulduğunda, ınfopath aşağıdaki hata iletisini alabilirsiniz:
XML veri dosyasını silmeye izin verilmiyor XML şema bilgileri içerir.

Neden

Infopath, ADO.NET DataSets doğrudan kullanamazsınız. Infopath, genel XML yükleri ile çalışır. Web Hizmetleri tarafından döndürülen ADO.NET DataSets serileştirilmiş olarak ADO.NET DataSets, ınfopath ile doğrudan çalışmasını engelleyen özel bir XML biçimi.
  • DataSet türü açık şema etikete göre yöntemleri ve bir Web hizmetinin özelliklerini tanımlayan Web hizmeti Açıklama Dili (ingilizce) dosyasında temsil edilir < xsd: tüm / >. Infopath, XML belgesinin bir Web hizmeti tarafından döndürülen şemanın algılayın. Ancak, Infopath örnek bir Web hizmeti do için bu arama yapmanız gerekir.
  • Bir ADO.NET DataSet içinde depolanan verileri tanımlayan bir satır içi şema içerir. Satır içi şemalar, ınfopath bu sürümünü desteklemiyor.
  • Verileri bir ADO.NET DataSet içindeki satır içi şemada tanımlanan <diffgr:diffgram> XML öğesine paketlenir. ADO.NET DataSet'in verileri içeren bir XML öğesi, şemada tanımlanan ek öznitelikleri de vardır. Verileri, şemayı eşleşmediğinden, ınfopath formun veri geçerliliği belirlenemiyor.
  • Infopath bir ADO.NET DataSet'e benzer değişiklik izleme için yerleşik destek vardır. Örneğin, alanları bir ADO.NET DataSet izler ve eklenen, değiştirilen veya olduğundan değişiklikler son silinen satırlar kabul edildi. (Diffgram öğesi ve XML akışı "diffgr" ad amacı budur.) Değişiklik izleme desteği için <a0></a0>, ınfopath ya da .NET Framework sevk ve XML verilerini yönetmek veya işlevselliğini re-implement bir DataSet nesnesi barındırması gerekir. Bu seçeneklerden hiçbiri, ınfopath bu sürümünde kullanılabilir.

Çözüm

Bu sorun, Microsoft Office ınfopath 2003 Service Pack 1 (SP1) giderilmiştir. Bu sorunu gidermek için <a0></a0>, Microsoft Office 2003 için en son hizmet paketini edinin. Infopath 2003 SP1'i tam olarak yazılan veri destekler ve ınfopath 2003'te bir ADO.NET DataSet döndüren bir Web hizmetinden bir form oluşturmanızı sağlar.

Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
870924En son Office 2003 hizmet paketi nasıl elde edilir
Bu soruna geçici bir çözüm bulmak için <a0></a0>, ADO.NET özgün Web hizmeti yönteminden döndürülen DataSet'e götüren yeni bir Web hizmeti yöntemi oluşturun. Satır içi şema diffgram öğeleri ve öznitelikleri kaldırın. Temizlenen XML ınfopath'e döndürür. Bu geçici çözüm iki olası uygulamaları için "Daha fazla bilgi" bölümüne bakın.

Durum

Bu davranış tasarım yüzündendir.

Daha fazla bilgi

Davranışı Yeniden Oluşturma Adımları

  1. Microsoft Visual Studio. NET'te, yeni bir Microsoft C# ASP.NET Web hizmeti projesi oluşturun. Bu proje için NorthwindDataSet değiştirin.

    Bu işlemi için http://localhost/NorthwindDataSet konumu değiştirerek yapabilirsiniz.
  2. Proje) menüsünde Add Web Service ' ı tıklatın. Yeni Web hizmeti CustomerInfo.asmx adı.
  3. Yeni CustomerInfo.asmx Web hizmeti için aşağıdaki kodu ekleyin:
    /************************************************************************
       * GetCustomerInfo -- This method retrieves information from the 
       * Customer table of the Northwind database and then returns it in an
       * ADO.NET DataSet.
       * Parameters: CustomerID is the string that contains the CustomerID of the 
       *                           customer to retrieve the information for.
       * Returns: An ADO.NET DataSet that contains information about the customer.
       * *********************************************************************/
    [WebMethod]
    public System.Data.DataSet GetCustomerInfo( string CustomerID )
    {
       try
       {
          //Create a Microsoft SQL Server connection to the local SQL Server.
          System.Data.SqlClient.SqlConnection theConnection = new SqlConnection();
          theConnection.ConnectionString = "Data Source=(local);" + 
             "Integrated Security=SSPI;Initial Catalog=northwind";
          
          //Create an SQL Command to query the data.
          System.Data.SqlClient.SqlCommand theCommand = new SqlCommand();
          theCommand.Connection = theConnection;
          theCommand.CommandText = "SELECT \"CustomerID\",\"CompanyName\"," + 
             "\"ContactName\",\"ContactTitle\",\"Address\",\"City\",\"Region\"," + 
             "\"PostalCode\",\"Country\",\"Phone\",\"Fax\" FROM \"Customers\" " + 
             "WHERE CustomerID='" + CustomerID + "'";
       
          //Create an SQL DataAdapter to read the data.
          System.Data.SqlClient.SqlDataAdapter theDataAdapter = new SqlDataAdapter();
          theDataAdapter.SelectCommand = theCommand;
    
          //Open the command, and then read the data.
          theConnection.Open();
          System.Data.DataSet theCustomerInfo = new DataSet();
          theCustomerInfo.DataSetName = "CustomerInfo";
          theCustomerInfo.Namespace = "http://localhost/NorthwindDataSet/CustomerInfo";
          theDataAdapter.Fill( theCustomerInfo, "Customers" );
    
          //Clean up.
          theConnection.Close();
       
          //Return the result.
          return theCustomerInfo;
       }
       catch(Exception ex)
       {
          return null;
       }
    }
    
    örnek kod, Web hizmeti ile aynı bilgisayarda Microsoft SQL Server çalıştıran bir bilgisayara bağlanmak çalışır. Alternatif olarak, SQL Server çalıştıran başka bir bilgisayara bağlanmak için System.Data.SqlConnection nesne tarafından kullanılan bağlantı dizesini değiştirebilirsiniz. Veritabanına erişmek için Web hizmetinin izin vermek için SQL Server izinlerini yapılandırmanız gerekebilir.Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    815154NASıL YAPıLıR: SQL Server güvenliği için .NET uygulamalarını yapılandırma
  4. CustomerInfo.asmx.cs sayfanın en üstünde KULLANARAK ifadeler için aşağıdaki kodu ekleyin:
    using System.Data.SqlClient;
  5. NorthwindDataSet Projeyi derleyin.
  6. Infopath başlatın. Dosya menüsünde, <a1>Tasarım</a1> bir form'ı tıklatın.
  7. Tasarım bir <a0>Form</a0> görev bölmesi, veri kaynağından yeni) tıklatın.
  8. Veri kaynağı Kur Sihirbazı iletişim kutusunda, Web hizmeti, veri kaynağının türünü seçin ve ileri ' yi tıklatın.
  9. Veri Al'ı seçin ve ileri ' yi tıklatın.
  10. (Örneğin, http://localhost/NorthwindDataSet/CustomerInfo.asmx) Customerınfo Web hizmetinin URL'SINI yazın ve sonra ileri ' yi tıklatın.
  11. Operasyonun GetCustomerInfo yöntemini seçin ve ileri ' yi tıklatın.
  12. S0:CustomerID parametreyi seçin ve ... Örnek değer ayarla</a1>'ı tıklatın. Değer Ayarla iletişim kutusuna ALFKI yazın ve Tamam ' ı tıklatın.
  13. Ileri ' yi tıklatın.

    Not Infopath "Belirtiler" bölümünde hata iletisi görüntüler.

Geçici çözümler

Bu soruna geçici bir çözüm için <a0></a0>, ADO.NET DataSet'in XML'DEN uyumsuz öğeleri kaldırır yeni bir Web hizmeti yöntemi eklemek için aşağıdaki adımları için benzer adımları kullanabilirsiniz. XML verileri, ınfopath tarafından kullanılabilir böylece bunun. Web hizmeti yöntemi, XML verilerini satır içi şema bilgilerini kaldırabilir veya Web hizmeti yöntem türü kesin belirlenmiş sarmalayıcı sınıf <a1>XML</a1> veri seri hale getirilmeye ve, geri dönün.

Her yöntemin avantajları ve dezavantajları vardır.

Geçici Çözüm 1

Satır içi şema ve uyumsuz bir XML öznitelikleri kaldırın.

Bu geçici çözüm iyi çünkü uygulamak basit bir işlemdir. Ayrıca, özgün Web hizmeti veren XML verileri herhangi bir nedenle değişirse, bu geçici çözüm, yeni verilerle çalışmak için herhangi bir değişiklik gerektirir.

Ancak, bu geçici çözümü bir dezavantajı da vardır. Bu geçici çözüm, XML verilerinin şema açıklanmaz. Bu nedenle, Infopath örnek verileri şemadan anlaması gerekir. Örnek veriler, tüm Web hizmeti yöntemi veren öznitelikleri ve olası öğeler içermiyorsa, ınfopath infers şema bu öğelerin içermez. Öğeleri veya örnek çağrısında olan öznitelikleri döndüren bir sorgu çalıştırmak, ınfopath bir hata görüntüler.

Geçici çözüm 1 uygulamak için aşağıdaki adımları izleyin:
  1. Visual Studio. NET'te NorthwindDataSet projeyi açın.
  2. Proje) menüsünde Add Web Service ' ı tıklatın. Yeni Web hizmeti IPCustomerInfo.asmx adı.
  3. Yeni IPCustomerInfo.asmx Web hizmeti için aşağıdaki kodu ekleyin:
    /************************************************************************
       * GetCustomerInfoNoSchema: This method calls the GetCustomerInfo
       * method of the CustomerInfo.asmx Web service, and then strips the 
       * inline schema from the resulting DataSet.
       * Parameters: CustomerID is the string that contains the CustomerID of the 
       *                           customer to retrieve information for.
       * Returns: An XML Document with no inline schema.
       * *********************************************************************/
    [WebMethod]
    public System.Xml.XmlDocument GetCustomerInfoNoSchema( string CustomerID )
    {
       //Get the core data.
       CustomerInfo theCustomerInfoService = new CustomerInfo();
       System.Data.DataSet theDataSet = 
          theCustomerInfoService.GetCustomerInfo( CustomerID );
    
       //Create a new XmlDocument from the data of the dataset.
       System.Xml.XmlDocument theDocument = new System.Xml.XmlDocument();
       theDocument.LoadXml( theDataSet.GetXml() );
    
       //Return the result.
       return theDocument;
    }
    
    örnek kod bir ADO.NET DataSet sağlamak için özgün Web hizmetini kullanır ve sonra da hiçbir satır içi şema bilgileri yeni bir XML belgesi oluşturur.
  4. NorthwindDataSet Projeyi derleyin.
  5. Infopath başlatın. Dosya menüsünde, <a1>Tasarım</a1> bir form'ı tıklatın.
  6. Tasarım bir <a0>Form</a0> görev bölmesi, veri kaynağından yeni) tıklatın.
  7. Veri kaynağı Kur Sihirbazı iletişim kutusunda, Web hizmeti, veri kaynağının türünü seçin ve ileri ' yi tıklatın.
  8. Veri Al'ı seçin ve ileri ' yi tıklatın.
  9. (Örneğin, http://localhost/NorthwindDataSet/IPCustomerInfo.asmx) IPCustomerInfo Web hizmetinin URL'SINI yazın ve sonra ileri ' yi tıklatın.
  10. Operasyonun GetCustomerInfoNoSchema yöntemini seçin ve ileri ' yi tıklatın.
  11. S0:CustomerID parametreyi seçin ve Örnek Değer Ayarla</a1>'ı tıklatın. Değer Ayarla iletişim kutusuna ALFKI yazın ve Tamam ' ı tıklatın.
  12. Ileri ' yi tıklatın ve sonra da <a2>son</a2>'u tıklatın.
  13. Veri kaynağı</a0> görev bölmesinde <a1>queryFields</a1> grubundan MüşteriNo alanını taşıyın ve sonra da MüşteriKimliği alanını sorgu görünümüne ekleyin.
  14. Müşteri grubu, veri kaynağı</a0> görev bölmesinde <a1>dataFields</a1> grubundan taşıyın ve sonra Müşteri grubu, Veri girişi görünümüne ekleyin. Denetim içeren bölüm Ek Yardım düğmesini tıklatın.
  15. Önizleme ve formun sınayın. Örnek verileri Web hizmeti veren tüm olası öğeler içermediğinden bazı bir müşteri kimlikleri MAÇA gibi sorgu hatayla karşılaştığında, dikkat edin.

Geçici çözüm 2

ADO.NET DataSet XML verilerini seri hale getirmek için bir kesinlikle Typed Wrapper sınıfı oluştur

Bu geçici çözüm, önceki geçici çözümü daha zordur. Ayrıca, bu geçici çözümü ile kullanılır ve Web hizmeti yöntemi döndürdüğü verileri, şemayı değiştirmelisiniz her Web hizmeti yöntemine uygun gerekir. Ancak, bu geçici çözümü döndürdüğü verileri XML şemasını açıklar. Bu nedenle, Infopath veri yapısını anlaması gerekmez. Sonuç olarak, bu geçici çözüm oluşturulan bir ınfopath formları, isteğe bağlı öğeleri ve öznitelikleri neden hatalar için açık değildir.
  1. Microsoft ınternet Explorer'da Customerınfo Web hizmetini sınama sayfası (örneğin, http://localhost/NorthwindDataSet/CustomerInfo.asmx) URL'YE gider.
  2. Bu yöntem için sınama sayfaya taşımak için GetCustomerInfo Ek Yardım düğmesini tıklatın.
  3. MüşteriNo metin kutusuna ALFKI girin ve ınvoke</a1>'ı tıklatın.
  4. Sonuçları XML'DEN <xs:schema> kopyalayın... öğeyi ve tüm alt ve sonra yapıştırma bunları yeni bir metin, Not Defteri'nde belge.
  5. Yapıştırılan metnin - karakterleri kaldırın ve belgeyi CustomerInfo.xsd kaydedin.
  6. Visual Studio. NET'in komut istemini açın ve CustomerInfo.xsd kaydettiğiniz dizine taşır.
  7. Şema dosyasından bir sarmalayıcı sınıf oluşturmak için aşağıdaki satırını kullanın:
    xsd.exe CustomerInfo.xsd /c /l:cs
  8. Visual Studio. NET'te NorthwindDataSet projeyi açın.
  9. Proje) menüsünde Add Existing ıtem ' ı tıklatın.
  10. Xsd.exe aracıyla oluşturulan CustomerInfo.cs dosyasına taşıyın ve sonra ' ı tıklatın.
  11. Customerınfo sınıf ve sınıf CustomerInfoCustomers CustomerInfoWrapper ad olarak ekleyin.
  12. IPCustomerInfo.asmx Web hizmeti için aşağıdaki kodu ekleyin:
    /************************************************************************
       * GetCustomerInfoWrapper: This method calls the GetCustomerInfo
       * method of the CustomerInfo.asmx Web service, and then strips the 
       * inline schema from the resulting DataSet.
       * Parameters: CustomerID is the string that contains the CustomerID of the 
       *                           customer to retrieve information for.
       *                        exampleData is the wrapper class to fill with the data from the
       *                           ADO.NET DataSet.
       * Returns: none
       * *********************************************************************/
    [WebMethod]
    public void GetCustomerInfoWrapper( string CustomerID, 
       out CustomerInfoWrapper.CustomerInfo exampleData )
    {
       //Get the core data.
       CustomerInfo theCustomerInfoService = new CustomerInfo();
       System.Data.DataSet theDataSet = 
          theCustomerInfoService.GetCustomerInfo( CustomerID );
       theDataSet.Namespace = "http://localhost/NorthwindDataSet/CustomerInfo";
    
       //Create an in-memory stream to write the DataSet to.
       System.IO.MemoryStream theStream = new System.IO.MemoryStream();
    
       //Write the DataSet to the stream.
       theDataSet.WriteXml( theStream, XmlWriteMode.IgnoreSchema );
    
       //Move the streams seek pointer back to the beginning, or 
       //deserialization will fail.
       theStream.Seek(0, System.IO.SeekOrigin.Begin );
    
       //Create an XML Serializer to read the DataSet.
       System.Xml.Serialization.XmlSerializer ser = new
          System.Xml.Serialization.XmlSerializer(
             typeof(CustomerInfoWrapper.CustomerInfo));
    
       //Deserialize a CustomerInfo wrapper from the stream.
       exampleData = ((CustomerInfoWrapper.CustomerInfo)
          (ser.Deserialize( theStream )));
       return;
    }
    
    örnek kod, özgün Web hizmetinin bir ADO.NET DataSet sağlamak için kullanır ve sonra da hiçbir satır içi şema bilgileri yeni bir XML belgesi oluşturur.
  13. NorthwindDataSet Projeyi derleyin.
  14. Infopath başlatın. Dosya menüsünde, <a1>Tasarım</a1> bir form'ı tıklatın.
  15. Tasarımı üzerinde bir <a0>Form</a0> görev bölmesi, Yeni veri kaynağı...'oluştur [NULL]'u tıklatın.
  16. Veri kaynağı Kur Sihirbazı iletişim kutusunda, Web hizmeti, veri kaynağının türünü seçin ve ileri ' yi tıklatın.
  17. Veri Al'ı seçin ve ileri ' yi tıklatın.
  18. (Örneğin, http://localhost/NorthwindDataSet/IPCustomerInfo.asmx) IPCustomerInfo Web hizmetinin URL'SINI yazın ve sonra ileri ' yi tıklatın.
  19. Işlem, GetCustomerInfoWrapper yöntemini seçin ve ileri ' yi tıklatın.

    Infopath, Web hizmeti yöntemi için örnek değerler belirtmeniz sormaz, dikkat edin.
  20. Son ' u tıklatın.
  21. Veri kaynağı</a0> görev bölmesinde <a1>queryFields</a1> grubundan MüşteriNo alanını taşıyın ve sonra da MüşteriKimliği alanını sorgu görünümüne ekleyin.
  22. Müşteri grubu, veri kaynağı</a0> görev bölmesinde <a1>dataFields</a1> grubundan taşıyın ve sonra Müşteri grubu, Veri girişi görünümüne ekleyin.
  23. Önizleme yapmaya ikna ettikten sonra formu sınamak.

    Bu formda herhangi bir geçerli müşteri ıD'SI çalışır dikkat edin.

Özellikler

Makale numarası: 822020 - Last Review: 28 Temmuz 2006 Cuma - Gözden geçirme: 2.4
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Office InfoPath 2003
Anahtar Kelimeler: 
kbmt kbtshoot kbxml kbprb KB822020 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:822020

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com