将DataMemberAttribute放在接口成员上意味着什么?这对派生类有何影响?
我创建了一个返回的WCF服务IEnumerable<CyberResourceProvisioningAction>
.
CyberResourceProvisioningAction类型具有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)
CyberResourceProvisioningActionAccountInfo
[DataContract]
public class CyberResourceProvisioningActionAccountInfo
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果需要其他配置信息,请通知我,我将编辑帖子.
我[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) 我希望在我的WCF数据协定成员上放置属性以验证字符串长度,并可能使用正则表达式进行更细粒度的参数验证.
我可以为数字和DateTime值设置[Range]属性,并且想知道是否有人找到了我可以用于数据验证的任何其他WCF数据成员属性.我发现Silverlight有很多属性,但WCF却没有.
我正在尝试创建一个具有只读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服务,并希望公开一些自定义配置元素(例如Custom ConfigurationSection和ConnectionStringSettings),以便我可以修改服务的配置.
我的一个自定义配置元素继承自System.Configuration.ConfigurationElementCollection
.当我尝试启动我的WCF服务时,我收到以下错误消息...
类型'System.Configuration.ConfigurationElementCollection'无法序列化.请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员.
有没有办法为此类型实现DataContract?我有我的继承类标有[DataContract]属性.
wcf serialization datacontract datamember configurationelement
我有一些对象需要在c ++中从不同的线程执行操作.我知道有必要锁定可能同时由多个线程使用的任何变量,但是如果每个线程正在访问(写入)同一对象的不同数据成员,该怎么办?例如,每个线程调用对象的不同方法,并且所调用的方法都不会修改相同的数据成员.只要我不访问相同的数据成员或者我是否需要锁定整个对象,它是否安全?
我四处寻找有关此主题的解释和详细信息,但每个示例似乎都集中在单个变量或非成员函数上.
总结一下:我可以安全地从2个不同的线程访问同一对象的2个不同的数据成员而不会锁定整个对象吗?
我想知道一种可能的方法,使类的内存布局在模板化代码中更有效.据我所知,标准要求一个类的数据成员按照其声明的顺序在内存中进行布局.编译器可能会执行填充以使数据成员对齐,从而不必要地增加类的大小.我们的想法是在编译时重新安排数据成员声明,以尽量减少这种填充.我做了一些搜索,但找不到任何信息(大多数时候人们讨论打包编译器指令,这与我看到的不完全相同).
首先,请考虑以下(琐碎,但重复和丑陋)代码(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) 我有这样的数据提取
[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.可能吗?怎么样?
我无法为属性指定自定义名称。我从服务器收到一些无法更改的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) datamember ×10
wcf ×6
datacontract ×5
c# ×3
c++ ×2
class ×2
asp.net ×1
attributes ×1
c#-4.0 ×1
ienumerable ×1
interface ×1
json ×1
soapui ×1
templates ×1