为什么我会从 WSDL 调用中得到 System.InvalidOperationException,但不会从对另一个服务的同一调用中得到 System.InvalidOperationException?

2024-05-26

我创建了服务来获取各个客户的国家/地区详细信息,但是在托管该服务时我遇到了此异常。我正在使用基本的 http 绑定。

An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.InvalidOperationException: An exception was thrown in a call to a 
WSDL export extension:   
  System.ServiceModel.Description.DataContractSerializerOperationBehavior
  contract: http://tempuri.org/:IReferenceDataService ----> 
     System.Runtime.Serialization.InvalidDataContractException: 
     Type 'Pariwaar.BusinessObject.CountryBO' cannot be serialized. 
     Consider marking it with the DataContractAttribute attribute, 
     and marking all of its members you want serialized with the 
     DataMemberAttribute attribute. See the Microsoft .NET Framework 
     documentation for other supported types.
   at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.ThrowInvalidDataContractException(String message, Type type)
   at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.CreateDataContract(Int32 id, RuntimeTypeHandle typeHandle, Type type)
   at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.GetDataContractSkipValidation(Int32 id, RuntimeTypeHandle typeHandle, Type type)
   at System.Runtime.Serialization.DataContract.GetDataContract(RuntimeTypeHandle typeHandle, Type type, SerializationMode mode)
   at System.Runtime.Serialization.DataContractSet.GetDataContract(Type clrType)
   at System.Runtime.Serialization.DataContractSet.GetItemTypeDataContract(CollectionDataContract collectionContract)
   at System.Runtime.Serialization.DataContractSet.AddCollectionDataContract(CollectionDataContract collectionDataContract)
   at System.Runtime.Serialization.DataContractSet.Add(XmlQualifiedName name, DataContract dataContract)
   at System.Runtime.Serialization.DataContractSet.Add(Type type)
   at System.Runtime.Serialization.XsdDataContractExporter.Export(Type type)
   at System.ServiceModel.Description.MessageContractExporter.ExportType(Type type, String partName, String operationName, XmlSchemaType& xsdType)
   at System.ServiceModel.Description.DataContractSerializerMessageContractExporter.ExportBody(Int32 messageIndex, Object state)
   at System.ServiceModel.Description.MessageContractExporter.ExportMessage(Int32 messageIndex, Object state)
   at System.ServiceModel.Description.MessageContractExporter.ExportMessageContract()
   at System.ServiceModel.Description.DataContractSerializerOperationBehavior.System.ServiceModel.Description.IWsdlExportExtension.ExportContract(WsdlExporter exporter, WsdlContractConversionContext contractContext)
   at System.ServiceModel.Description.WsdlExporter.CallExtension(WsdlContractConversionContext contractContext, IWsdlExportExtension extension)
   --- End of inner ExceptionDetail stack trace ---
   at System.ServiceModel.Description.WsdlExporter.CallExtension(WsdlContractConversionContext contractContext, IWsdlExportExtension extension)
   at System.ServiceModel.Description.WsdlExporter.CallExportContract(WsdlContractConversionContext contractContext)
   at System.ServiceModel.Description.WsdlExporter.ExportContract(ContractDescription contract)
   at System.ServiceModel.Description.WsdlExporter.ExportEndpoint(ServiceEndpoint endpoint, XmlQualifiedName wsdlServiceQName)
   at System.ServiceModel.Description.WsdlExporter.ExportEndpoints(IEnumerable`1 endpoints, XmlQualifiedName wsdlServiceQName)
   at System.ServiceModel.Description.ServiceMetadataBehavior.MetadataExtensionInitializer.GenerateMetadata()
   at System.ServiceModel.Description.ServiceMetadataExtension.EnsureInitialized()
   at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.InitializationData.InitializeFrom(ServiceMetadataExtension extension)
   at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.GetInitData()
   at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.TryHandleDocumentationRequest(Message httpGetRequest, String[] queries, Message& replyMessage)
   at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.ProcessHttpRequest(Message httpGetRequest)
   at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.Get(Message message)
   at SyncInvokeGet(Object , Object[] , Object[] )
   at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

I have businessobject[datamember]在另一个项目中。我在这里引用了它的dll。

你可以查看我的课程

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using Pariwaar.BusinessObject;
using Pariwaar.DataAccessLayer;

namespace Pariwaar.WCFServices.SVC
{
    // NOTE: If you change the class name "ReferenceDataService" here, you must also update the reference to "ReferenceDataService" in Web.config.
    public class ReferenceDataService : IReferenceDataService
    {
        ReferenceData objDAL = new ReferenceData();

        public List<CountryBO> GetCountry()
        { return objDAL.GetCountry(); }

        public List<StateBO> GetState(int CountryId)
        { return objDAL.GetState(CountryId); }

        public List<CityBO> GetCity(int StateId)
        { return objDAL.GetCity(StateId); }
    }
}

为什么这在另一个 WCF 服务中工作正常,但在另一个服务中却出现错误?


嗯,错误很明显:

System.Runtime.Serialization.InvalidDataContractException: 类型 'Pariwaar.BusinessObject.CountryBO'无法序列化。考虑标记 它与数据契约属性属性,并标记其所有 您想要序列化的成员 DataMemberAttribute 属性。看 微软.NET框架 其他受支持的文档 类型。

您显然正在使用数据类型Pariwaar.BusinessObject.CountryBO作为 WCF 服务方法之一的参数或返回值,但该类没有[DataContract]其上的属性。

请参阅 MSDN 文档使用数据合约 http://Pariwaar.BusinessObject.CountryBO了解数据协定以及如何使您的对象可供 WCF 使用。看到这个博客文章 - WCF 基础知识:数据契约 http://www.arquitecturadesoftware.org/blogs/hugobatista/archive/2005/11/06/wcf-basics-data-contracts.aspx对于同一主题的另一种观点。

所有复杂类型(例如类)都应使用 [DataContract] 进行标记,所有要包含在 WCF 消息中的字段都应使用 [DataMember] 进行标记:

[DataContract]
class Pariwaar.BusinessObject.CountryBO
{
   [DataMember]
   string CountryName { get; set; }

   [DataMember]
   string CountryCurrency { get; set; }

   [DataMember]
   string CountryISOCode { get; set; }

   ........
}

Marc

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我会从 WSDL 调用中得到 System.InvalidOperationException,但不会从对另一个服务的同一调用中得到 System.InvalidOperationException? 的相关文章

  • 从 WCF 服务返回接口

    我有一些 NET 远程处理代码 其中在某些服务器端类中实现的工厂方法返回具体对象的接口 也在同一台服务器上执行 NET 远程处理会自动创建代理 并允许我将接口传递给客户端 然后客户端可以直接调用它们 接口示例 public interfac
  • 有状态 WCF Web 服务

    我是 WCF 新手 我一直在尝试在 Web 服务中使用会话状态 我设法使用number http www codeproject com KB session SessionWithWS aspx msg 3227646 of http w
  • 如果我使用带有表单身份验证的 WCF,php 或 java 客户端将如何进行身份验证?

    我有一个通用的概念验证 WCF 服务 它使用表单身份验证来保护访问 当我的客户端是 NET 时 一切都很好 vb 代码如下 Dim client As SupplierServiceClient New SupplierServiceCli
  • WCF获取证书编码值

    我在 WCF 服务中使用证书 因此在 web Config 中有一个编码值
  • Silverlight 3 中 WCF 服务客户端代理的正确生命周期是什么?

    我在网上找到了我的问题的复杂答案 详细说明这个问题 我应该在每次异步调用时实例化服务客户端代理一次 还是在每个 Silverlight 应用程序中实例化一次 我是否应该显式关闭服务客户端代理 就像我在同步调用 WCF 服务的 ASP NET
  • 从 Angular 2 和 Silverlight 应用程序使用相同的 WCF 服务

    目前 我们有一个带有 WCF 服务 后端 的 Silverlight 应用程序 前端 现在 我们将用 Angular 2 应用程序替换 Silverlight 应用程序 而不更改 WCF 服务 只有 UI 会发生变化 在开始使用 Angul
  • WCF服务库项目找不到对其他项目的引用

    我的解决方案中有两个项目 MyApp Domain 和 MyApp WebService MyApp WebService 是一个 WCF 服务库 我想使用 MyApp Domain 中的一些实用函数 因此 在 MyApp WebServi
  • WCF 包装代理客户端

    我的项目中有许多在客户端应用程序中使用的 Web 方法 我不想写这样的代码 using ServiceClient sc new ServiceClient Invoke service methods sc Method1 相反 我想写
  • 如何处理 WCF 中不正确的 SOAP 错误?

    我必须使用 SOAP 来使用第三方 Web 服务 让它与 WCF 一起工作很容易 但现在我遇到了 SOAP 错误的问题 该服务向我发送了不正确的 SOAP 错误
  • 多线程 C# 应用程序中的惰性单例

    我正在开发一个使用 WCF Web 服务的多线程 C 应用程序 与 Web 服务的连接将有一个特定的超时时间 我们可以定义该超时时间 之后连接将关闭 我希望使用单例类来存储与 Web 服务的连接 我试图获取实例如下 CLazySinglet
  • 使用 Protobuf-net 和 Monotouch for IOS 通过 WCF 序列化 IEnumerable 槽

    我正在尝试在 iOS 的 Monotouch Monodevelop 上编写 WCF 服务 我为可序列化对象使用了标准属性 例如 DataMember DataContract 为我的接口使用了 ServiceContract Operat
  • WCF vs ASPX webmethods vs ASMX webmethods

    目的是创建一组人们可以重用的 Web 服务 这些服务主要与创建 检索和处理数据的后端数据库交互 我们希望公开服务 以便人们可以用来创建数据混搭和其他应用程序 最终用户是可以位于我们域内或域外的网页 对于域外的页面 我们计划发布配置为检索和显
  • 没有 ASP.NET/IIS 的 .NET Web 服务?

    我正在实现一个需要公开 Web 服务接口的服务器组件 但应用程序不需要它在 IIS 上与 ASP NET 一起运行 有没有一种直接的方法可以在不使用 ASP NET IIS 的情况下在 NET 中实现 Web 服务 我使用的是 NET 3
  • 将大文件返回为拆分 zip 文件、流或字节数组 WCF 的最佳方法

    我已经将 zip 文件流返回给客户端 如下所示MessageContract MessageContract public class ExportResult C MessageHeader public PackedStudy C Pa
  • 实体框架和数据库集

    我正在尝试设置一个通用接口来从存储库中检索实体 问题是我需要从 WCF 服务请求数据 而据我所知 泛型不能与操作合约一起使用 所以我有这个在控制台应用程序中工作 而不是使用服务调用 public virtual List
  • 服务具有零个应用程序(非基础设施)端点

    我最近创建了一个WCF服务 dll 和一个服务主机 exe 我知道我的 WCF 服务工作正常 因为我能够成功地将服务添加到 WcfTestClient 但是 当我从服务主机 exe 使用 WCF 时 我似乎遇到了问题 我可以将对 WCF d
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • PHP WCF 集成

    是不是如果我想支持php客户端访问我的服务 我必须有一个基本的http端点 这是因为php仍然只支持soap 1 1吗 据我所知 自从我使用 PHP 以来已经两年了 情况仍然如此 如果客户端应用程序将使用 PHP 的内置 SoapClien
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 如何从c#中的窗口服务获取登录用户和机器名?

    如何在c 中从窗口服务获取登录用户 交互式用户 和机器名 当我尝试使用环境和其他类来登录用户名时 它只从窗口服务返回 NT AUTHORITY SYSTEM 该服务在 SYSTEM 帐户下执行 因此您在Environment班级 机器名称应

随机推荐