在类库中使用 WCF 服务时出错

Posted

技术标签:

【中文标题】在类库中使用 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();

【讨论】:

以上是关于在类库中使用 WCF 服务时出错的主要内容,如果未能解决你的问题,请参考以下文章

在类库项目中添加 WCF 服务引用,并在使用该类库的网站中添加相同的 WCF 引用。

使用 Xamarin 在可移植类库中保护 WCF 绑定

Session在类库中的使用

在 NetStandard 2.0 类库中托管 WCF 服务

在类库中嵌入二进制文件

在我的 Web 应用程序引用的类库中访问 wcf 数据服务时出现问题