在 ClassLibrary 中使用 WCF 服务时出错
Posted
技术标签:
【中文标题】在 ClassLibrary 中使用 WCF 服务时出错【英文标题】:Error in consuming WCF service in ClassLibrary 【发布时间】: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**
【问题讨论】:
【参考方案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();
【讨论】:
以上是关于在 ClassLibrary 中使用 WCF 服务时出错的主要内容,如果未能解决你的问题,请参考以下文章
在 NetStandard 2.0 类库中托管 WCF 服务
如果我要在 IIS 中托管 WCF 服务,使用 WCF 服务而不是 WCF 库有啥好处?