【问题标题】:Error in consuming WCF service in ClassLibrary在类库中使用 WCF 服务时出错
【发布时间】:2011-08-06 05:22:22
【问题描述】:

我通过添加 WCF 服务的 Web 引用来使用 classLibrary 中的 WCF。

所有服务类都显示出来了,它们没有构建错误。

但是在调用服务的方法时,得到下面提到的错误:-

我在包含 xml 的方法中传递了一个对象。

但是当我使用 svcutil.exe 制作代理类时,然后使用具有相同 xml 的相同对象调用服务方法,不会出现错误,它工作正常。

_**这意味着在classLibrary中我们只能通过创建代理而不是添加WCF服务的Web引用来使用WCF服务。

以上说法正确与否?

如果没有,请提供解决方案。**_

**错误:

System.InvalidOperationException: There is an error in XML document (1, 528). ---> System.InvalidOperationException: Instance validation error: '' is not a valid value for PropertySubType.
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderHotelFlow.Read29_PropertySubType(String s)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderHotelFlow.Read30_Hotel(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderHotelFlow.Read31_SearchResult(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderHotelFlow.Read100_SearchHotelsResponse()
   at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer8.Deserialize(XmlSerializationReader reader)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   at ClassLibTestTouricoWCFinCsharp.com.touricoholidays.demo2.HotelFlow.SearchHotels(SearchRequest request) in C:\Documents and Settings\Prakash.singh\My Documents\Visual Studio 2005\Projects\ClassLibTestTouricoWCFinCsharp\ClassLibTestTouricoWCFinCsharp\Web References\com.touricoholidays.demo2\Reference.cs:line 132
   at ClassLibTestTouricoWCFinCsharp.Class1.test() in C:\Documents and Settings\Prakash.singh\My Documents\Visual Studio 2005\Projects\ClassLibTestTouricoWCFinCsharp\ClassLibTestTouricoWCFinCsharp\Class1.cs:line 78**

【问题讨论】:

    标签: wcf


    【解决方案1】:

    您基本上看到了Service Reference and a Web Reference 之间的区别。听起来您正在使用的 WCF 服务与添加 Web 引用不兼容,您应该改用服务引用。

    话虽如此,不使用任何一个都更简洁,而是使用ChannelFactory 或通过从ClientBase 派生来创建自己的代理。这是使用 ChannelFactory 的示例。

    ChannelFactory<IContract> factory = new ChannelFactory<IContract>("BindingConfigName");
    IContract channel = factory.CreateChannel();
    
    channel.YourOperation();
    
    ((ICommunicationObject)channel).Close();
    

    【讨论】:

      猜你喜欢
      • 2012-12-07
      • 2015-03-10
      • 2011-08-27
      • 2011-08-06
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多