标签: datamember

8
推荐指数
1
解决办法
4328
查看次数

WCF - 使用DataMember解析IEnumerable <T>会导致异常:基础连接已关闭:连接意外关闭

我创建了一个返回的WCF服务IEnumerable<CyberResourceProvisioningAction>.

Cyber​​ResourceProvisioningAction类型具有AccountInformation属性IEnumerable<CyberResourceProvisioningActionAccountInfo>.当我使用DataMemberAttribute装饰AccountInformation属性时,我收到异常:

WCF System.Net.WebException:底层连接已关闭:连接意外关闭

显然是一个非常通用的例外,但是我的Google-fu表明在集合中返回大量对象时最常出现的问题.建议的解决方法是设置<dataContractSerializer maxItemsInObjectGraph="2147483646"/>.不幸的是,这并没有解决我的问题.(没想到会因为我返回少量数据).

属性设置正确,所以我很确定我的问题与我的序列化配置有关.我的类有什么问题导致WCF服务以这种方式出错吗?

[DataContract]
public class CyberResourceProvisioningAction
{
    [DataMember]
    public string Action { get; set; }

    [DataMember]
    public DateTime RcdChgDateTime { get; set; }

    [DataMember]
    public string CyberResourceName { get; set; }

    [DataMember]
    public IEnumerable<CyberResourceProvisioningActionAccountInfo> AccountInformation
    { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Cyber​​ResourceProvisioningActionAccountInfo

[DataContract]
public class CyberResourceProvisioningActionAccountInfo
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果需要其他配置信息,请通知我,我将编辑帖子.

c# ienumerable wcf datamember c#-4.0

8
推荐指数
1
解决办法
3750
查看次数

WCF:是否有一个属性要在OperationContract中生成参数?

[DataMember(IsRequired=true)]用来制作所需的DataContract属性.对于OperationContract参数似乎没有一些IsRequired.如何使它们成为必需而不允许null?

在SoapUI工具中,OperationContract中的参数似乎是可选的.虽然这绝不是可选的或null.

WCF接口:

[OperationContract]
IsClientUpdateRequiredResult IsClientUpdateRequired(IsClientUpdateRequiredInput versie);

...

[DataContract]
public class IsClientUpdateRequiredInput
{
    [DataMember(IsRequired=true)]
    public string clientName { get; set; }
    [DataMember(IsRequired = true, Order = 0)]
    public int major { get; set; }
    [DataMember(IsRequired = true, Order = 1)]
    public int minor { get; set; }
    [DataMember(IsRequired = true, Order = 2)]
    public int build { get; set; }
    [DataMember(IsRequired = true, Order = 3)]
    public int revision { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

soapUI请求模板:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/" …
Run Code Online (Sandbox Code Playgroud)

asp.net wcf soapui datamember operationcontract

8
推荐指数
1
解决办法
8623
查看次数

DataMember属性用于数据验证

我希望在我的WCF数据协定成员上放置属性以验证字符串长度,并可能使用正则表达式进行更细粒度的参数验证.

我可以为数字和DateTime值设置[Range]属性,并且想知道是否有人找到了我可以用于数据验证的任何其他WCF数据成员属性.我发现Silverlight有很多属性,但WCF却没有.

wcf attributes datamember

8
推荐指数
1
解决办法
2万
查看次数

只读字段的WCF DataMember属性?

我正在尝试创建一个具有只读Id字段的类,但是当对象通过WCF服务器时,我在保留值时遇到问题.

我无法[DataMember]在公共属性上设置属性,因为没有set方法,并且我希望尽可能保持这种方式,因为我不希望通过外部方式更改此值.我无法[DataMember]在私有字段上设置该属性,因为它在部分信任环境中引发错误.

public class MyClass
{
    private int _id;

    public int Id 
    { 
        get { return _id; } 
    }

    private string _otherProperties;

    [DataMember]
    public string OtherProperties
    {
        get { return _otherProperties; } 
        set { _otherProperties = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在通过WCF服务器时保持Id字段的值而不公开我的属性?

wcf datacontract datamember

7
推荐指数
2
解决办法
9374
查看次数

WCF无法序列化.NET基类型

我正在编写WCF服务,并希望公开一些自定义配置元素(例如Custom ConfigurationSection和ConnectionStringSettings),以便我可以修改服务的配置.

我的一个自定义配置元素继承自System.Configuration.ConfigurationElementCollection.当我尝试启动我的WCF服务时,我收到以下错误消息...

类型'System.Configuration.ConfigurationElementCollection'无法序列化.请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员.

有没有办法为此类型实现DataContract?我有我的继承类标有[DataContract]属性.

wcf serialization datacontract datamember configurationelement

6
推荐指数
1
解决办法
1万
查看次数

从C++中的2个不同线程访问属于同一对象的不同数据成员

我有一些对象需要在c ++中从不同的线程执行操作.我知道有必要锁定可能同时由多个线程使用的任何变量,但是如果每个线程正在访问(写入)同一对象的不同数据成员,该怎么办?例如,每个线程调用对象的不同方法,并且所调用的方法都不会修改相同的数据成员.只要我不访问相同的数据成员或者我是否需要锁定整个对象,它是否安全?

我四处寻找有关此主题的解释和详细信息,但每个示例似乎都集中在单个变量或非成员函数上.

总结一下:我可以安全地从2个不同的线程访问同一对象的2个不同的数据成员而不会锁定整个对象吗?

c++ multithreading class datamember

6
推荐指数
1
解决办法
1367
查看次数

编译时重新安排数据成员?

我想知道一种可能的方法,使类的内存布局在模板化代码中更有效.据我所知,标准要求一个类的数据成员按照其声明的顺序在内存中进行布局.编译器可能会执行填充以使数据成员对齐,从而不必要地增加类的大小.我们的想法是在编译时重新安排数据成员声明,​​以尽量减少这种填充.我做了一些搜索,但找不到任何信息(大多数时候人们讨论打包编译器指令,这与我看到的不完全相同).

首先,请考虑以下(琐碎,但重复和丑陋)代码(ideone.com上的相同代码)(问题在代码下面,可以随意跳到它们):

#include <iostream>
#include <cstdint>

namespace so
{
template <typename Ta, typename Tb, typename Tc, std::size_t =
    ((sizeof(Ta) >= sizeof(Tb)) && (sizeof(Tb) >= sizeof(Tc))) ? 10 :
    ((sizeof(Ta) >= sizeof(Tc)) && (sizeof(Tc) >= sizeof(Tb))) ? 11 :
    ((sizeof(Tb) >= sizeof(Ta)) && (sizeof(Ta) >= sizeof(Tc))) ? 20 :
    ((sizeof(Tb) >= sizeof(Tc)) && (sizeof(Tc) >= sizeof(Ta))) ? 21 :
    ((sizeof(Tc) >= sizeof(Ta)) && (sizeof(Ta) >= sizeof(Tb))) ? 30 :
    ((sizeof(Tc) >= sizeof(Tb)) && (sizeof(Tb) >= sizeof(Ta))) ? 31 : …
Run Code Online (Sandbox Code Playgroud)

c++ templates class datamember memory-layout

6
推荐指数
1
解决办法
220
查看次数

我可以阻止特定数据库反序列化吗?

我有这样的数据提取

[DataContract]
class MyDC 
{
    [DataMember]
    public string DM1;

    [DataMember]
    public string DM2;

    [DataMember]
    public string DM3;
}
Run Code Online (Sandbox Code Playgroud)

有时我想,以防止DM2从一个OperationContract的返回时被反序列化.像这样的东西:

[OperationContact]
public MyDC GetMyDC()
{
    MyDC mdc = new MyDC();

    if (condition)
    {
        // Code to prevent DM2 from being deserialized  
    }

    return mdc;
}
Run Code Online (Sandbox Code Playgroud)

我总是可以创建一个只有DM1和DM3的新DataContract并从MyDC实例生成,但我想看看是否可以以编程方式删除DM2.可能吗?怎么样?

wcf serialization datacontract datamember

5
推荐指数
2
解决办法
5188
查看次数

自定义DataMember名称以反序列化JSON类

我无法为属性指定自定义名称。我从服务器收到一些无法更改的JSON,但属性名称却很丑陋。我希望C#代码遵循命名约定。

下面是我的代码(result0.StringValue保持为空):

  [TestClass()]
  public class WebServiceResultConverterTest
  {
    [DataContract(Name = "SimpleObject")]
    private class SimpleObject
    {
        [DataMember(Name = "str_value")]
        public String StringValue { get; set; }

        [DataMember(Name = "int_value")]
        public String IntValue { get; set; }
    }

    [TestMethod()]
    public void DeserializeTest()
    {
        String input0 = @"{
          ""str_value"": ""This is a test string"",
          ""int_value"": 1664
        }";

        JavaScriptSerializer serializer = new JavaScriptSerializer();
        SimpleObject result0 = serializer.Deserialize<SimpleObject>(input0);

        Assert.AreEqual("This is a test string", result0.StringValue);
        Assert.AreEqual(1664, result0.IntValue);
    }
  }
Run Code Online (Sandbox Code Playgroud)

c# json datacontract datamember

5
推荐指数
1
解决办法
8770
查看次数