gpt4 book ai didi

c# - 避免 WCF 中的消息契约

转载 作者:太空宇宙 更新时间:2023-11-03 15:46:09 26 4
gpt4 key购买 nike

您好,这可能是重复的,但写在这里是因为我无法从目前看到的帖子中解决问题。

我在我的 WCF 服务和我的客户端上有 DataContracts,我只想将我的服务作为 DataContract 对象使用,但是当我创建服务引用时,我的 WCF 服务会为所有方法生成消息契约(Contract)。

  [ServiceContract]

public interface IUserService
{
[OperationContract]
UserVO GetUser(int Id);
}

[DataContract]
public Class UserVO
{
[DataMember]
public int Id{get;set;};
}

我已取消选中“始终生成消息契约”并选中实体可用的引用库中的重用类型(数据契约)。

我的 reference.cs 有一个像这样的消息协定

System.ServiceModel.MessageContractAttribute(WrapperName="GetUser",      WrapperNamespace="http://tempuri.org/", IsWrapped=true)]
public partial class GetUserRequest {
}

编辑 1:

我的 Reference.svcmap 有这样的客户端配置

 <ClientOptions>
<GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
<EnableDataBinding>true</EnableDataBinding>
<ExcludedTypes />
<ImportXmlTypes>false</ImportXmlTypes>
<GenerateInternalTypes>false</GenerateInternalTypes>
<GenerateMessageContracts>false</GenerateMessageContracts>
<NamespaceMappings />
<CollectionMappings>
<CollectionMapping TypeName="System.Collections.Generic.List`1" Category="List" />
</CollectionMappings>
<GenerateSerializableTypes>true</GenerateSerializableTypes>
<Serializer>Auto</Serializer>
<UseSerializerForFaults>true</UseSerializerForFaults>
<ReferenceAllAssemblies>true</ReferenceAllAssemblies>
<ReferencedAssemblies />
<ReferencedDataContractTypes />
<ServiceContractMappings />

编辑 2:我正在努力实现类似下面的目标

[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IUserService/GetUserDetails", ReplyAction="http://tempuri.org/IUserService/GetUserDetailsResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(UserServiceFaultContract), Action="http://tempuri.org/IUserService/GetUserDetailsUserServiceFaultContractFault", Name="UserServiceFaultContract", Namespace="http://schemas.datacontract.org/2004/07/mynamespace")]
MyEntities.UserVO GetUserDetails(int id);

最佳答案

默认情况下,WCF 使用 DataContractSerializer 类来序列化数据类型。如果您的场景需要使用 XmlSerializer,那么您可以通过将 XmlSerializerFormatAttribute 属性应用于您的服务XmlSerializer 来手动切换到 XmlSerializer/p>

以下 MSDN 文章描述了该过程:
https://msdn.microsoft.com/en-us/library/ms733901(v=vs.110).aspx

建议在切换序列化类之前仔细考虑安全说明。

关于c# - 避免 WCF 中的消息契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28071013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com