Visual Studios WCF共享库类DataContractAttribute

时间:2012-04-10 23:10:14

标签: c# wcf visual-studio

我有一个Visual Studios C#类库(A5Lib)和一个WCF服务项目(A5Services)。 A5Services项目引用A5Lib,Web服务函数使用在A5Lib中创建的类(作为参数/返回对象)。

我的ASP Web项目也将使用A5Lib中的类,因此我不想将这些对象移动到Web服务。

问题是当我尝试运行A5Services时,出现以下错误:

  

错误:无法从http://localhost:16344/UserServices.svc获取元数据如果这是您有权访问的Windows(R)Communication Foundation服务,请检查您是否已在指定地址启用元数据发布。有关启用元数据发布的帮助,请参阅http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata上的MSDN文档:Exchange错误URI:http://localhost:16344/UserServices.svc元数据包含无法解析的引用:' http:// localhost:16344 / UserServices。 SVC&#39 ;.内容类型application / soap + xml;服务http://localhost:16344/UserServices.svc不支持charset = utf-8。客户端和服务绑定可能不匹配。远程服务器返回错误:(415)不支持的媒体类型.HTTP GET错误URI:http://localhost:16344/UserServices.svc下载' http:// localhost:16344 / UserServices.svc'时出错。请求失败并显示错误消息: - #content {FONT-SIZE:0.7em; PADDING-BOTTOM:2em; MARGIN-LEFT:30px} BODY {MARGIN-TOP:0px; MARGIN-LEFT:0px;颜色:#000000; FONT-FAMILY:Verdana;背景颜色:白色} P {MARGIN-TOP:0px; MARGIN-BOTTOM:12px;颜色:#000000; FONT-FAMILY:Verdana} PRE {BORDER-RIGHT:#f0f0e0 1px solid; PADDING-RIGHT:5px; BORDER-TOP:#f0f0e0 1px solid; MARGIN-TOP:-5px; PADDING-LEFT:5px; FONT-SIZE:1.2em; PADDING-BOTTOM:5px; BORDER-LEFT:#f0f0e0 1px solid; PADDING-TOP:5px; BORDER-BOTTOM:#f0f0e0 1px solid; FONT-FAMILY:Courier New;背景颜色:#e5e5cc} .heading1 {MARGIN-TOP:0px; PADDING-LEFT:15px; FONT-WEIGHT:正常; FONT-SIZE:26px; MARGIN-BOTTOM:0px; PADDING-BOTTOM:3px; MARGIN-LEFT:-30px;宽度:100%;颜色:#ffffff; PADDING-TOP:10px; FONT-FAMILY:Tahoma; BACKGROUND-COLOR:#003366} .intro {MARGIN-LEFT:-15px} ServiceService


该服务遇到错误。

     

ExceptionDetail,可能由IncludeExceptionDetailInFaults = true创建,其值为:System.InvalidOperationException:在调用WSDL导出扩展时抛出异常:System.ServiceModel.Description.DataContractSerializerOperationBehavior contract:http://tempuri.org/:IUserServices - - &GT; System.Runtime.Serialization.InvalidDataContractException:输入&#39; A5Lib.Appliance&#39;无法序列化。请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员。如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记。有关其他受支持的类型,请参阅Microsoft .NET Framework文档。在System.Runtime.Serialization.DataContract.DataContractCriticalHelper.ThrowInvalidDataContractException(字符串消息,类型类型)在System.Runtime.Serialization.DataContract.DataContractCriticalHelper.CreateDataContract(的Int32 ID,类型句柄的RuntimeTypeHandle,类型型)在System.Runtime.Serialization.DataContract。 System.Runtime.Serialization.Serialization.DataContractSet中的System.Runtime.Serialization.CodeI.Cetract.DataContract(System_Runtime.Serialization.Cn.Cetract.DataContract)的System.Runtime.Serialization.DataContractSet.GetDataContract(Type clrType)处的DataContractCriticalHelper.GetDataContractSkipValidation(Int32 id,RuntimeTypeHandle typeHandle,Type type)。 AddCollectionDataContract(CollectionDataContract collectionDataContract)在System.Runtime.Serialization.DataContractSet.InternalAdd(XmlQualifiedName名称,dataContract dataContract)在System.Runtime.Serialization.DataContractSet.AddClassDataContract(ClassDataContract classDataContract)在System.Runtime.Serializ ation.DataContractSet.InternalAdd(XmlQualifiedName名称,DataContract dataContract)在System.Runtime.Serialization.DataContractSet.Add(类型类型)在System.Runtime.Serialization.XsdDataContractExporter.Export(类型类型)在System.ServiceModel.Description.MessageContractExporter.ExportType (Type type,String partName,String operationName,XmlSchemaType&amp;系统上的System.ServiceModel.Description.MessageContractExporter.ExportMessage(Int32 messageIndex,Object state)中的System.ServiceModel.Description.DataContractSerializerMessageContractExporter.ExportBody(Int32 messageIndex,Object state)处的System.ServiceModel.Description.MessageContractExporter.ExportMessageContract()处的xsdType) System.ServiceModel.Description.WsdlExporter.CallExtension(WsdlContractConversionContext contractContext,IWsdlExportExtension extension)中的.ServiceModel.Description.DataContractSerializerOperationBehavior.System.ServiceModel.Description.IWsdlExportExtension.ExportContract(WsdlExporter exporter,WsdlContractConversionContext contractContext)---内部ExceptionDetail堆栈跟踪结束 - - 在System.ServiceModel.Description.ServiceMetadataBehavior.MetadataExtensionInitializer.GenerateMetadata()在System.ServiceModel.Description.ServiceMetadataExtension.EnsureInitialized()在System.ServiceModel.Description.ServiceMetadataExtension.HttpGet System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.TryHandleDocumentationRequest(消息httpGetRequest,String []查询,消息&amp;处理中的System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.GetInitData()中的Impl.InitializationData.InitializeFrom(ServiceMetadataExtension扩展)。 replyMessage)在System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.ProcessHttpRequest(在System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.Get(消息信息)中的SyncInvokeGet(对象消息httpGetRequest),对象[],在系统对象[])。 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5上的System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)中的ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(对象实例,Object []输入,Object []和输出)(MessageRpc&amp; ; rpc)System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&amp; rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp; rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; rpc)at System System.ServiceM上的.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp; rpc) odel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&安培; rpc)System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp; rpc)at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) - 。< / p>

以下是我退出的内容:

  

输入&#39; A5Lib.Appliance&#39;无法序列化。请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员。如果类型是集合,请考虑使用CollectionDataContractAttribute标记它。

Visual Studio不允许我用这些属性标记A5Lib(编译错误)中的那些类/数据成员(即使使用System.Runtime.Serialization)。有什么理由吗?

2 个答案:

答案 0 :(得分:0)

我将[Serializable]添加到所有类中,它神奇地工作........

答案 1 :(得分:0)

我必须显式添加System.Runtime.Serialization可引用的引用。不知道为什么因为你说当你输入using语句时VS似乎解决了它?