我对整个WCF都很陌生,英语不是我的主要语言,所以请耐心等待。
我正在尝试将自定义对象从应用程序发送到我已设置的WCF服务。它适用于基本的东西,比如简单的字符串,但是当它涉及更复杂和自定义的对象时,它会重新获取对象,而不是内容。即内容全部为0 / null。
我在堆栈的不同帖子中尝试了一些建议的答案,但在我的案例中没有一个有效。
所以,代码(解决了一些混乱,并保持相关。):
合同:
[ServiceContract]
//[ServiceKnownType(typeof(AClient))]
//[ServiceKnownType(typeof(AddressInfo))]
public interface ISIA
{
[OperationContract]
AClient TransferCreditor(AClient client);
}
尝试使用知识类型并且不使用它们。
操作(serviceside):
public AClient TransferClient(AClient client)
{
return MethodThatDoesStuff.insertClient(client);
}
AClient类:
[DataContract(IsReference = true)]
public class AClient
{
[DataMember]
public int PhoneNo { get; set; }
[DataMember]
public string Email { get; set; }
[DataMember]
public string CompanyNo { get; set; }
[DataMember]
public string CompanyName { get; set; }
[DataMember]
public bool VatLiable { get; set; }
[DataMember]
public string BankAccount { get; set; }
[DataMember]
public string ContactName { get; set; }
[DataMember]
public string CompanyEmail { get; set; }
[DataMember]
public AddressInfo Address { get; set; }
[DataMember]
public bool SendeInkVarsSelv { get; set; }
[DataMember]
public bool MVAplikt { get; set; }
[DataMember]
public bool GodkjentAvtale { get; set; }
[DataMember]
public bool RBpurrerSelv { get; set; }
[DataMember]
public bool StarteInkasso { get; set; }
[DataMember]
public int AntPurringer { get; set; }
[DataMember]
public string KonsernNr { get; set; }
[DataMember]
public string KreditorNr { get; set; }
}
AddressInfo类:
[DataContract(IsReference = true)]
public class AddressInfo
{
[DataMember]
public string Address1 { get; set; }
[DataMember]
public string Address2 { get; set; }
[DataMember]
public string ZipCode { get; set; }
[DataMember]
public string City { get; set; }
[DataMember]
public string CountryCode { get; set; }
}
从客户端到服务的呼叫:
internal void TransferClient(AClient client)
{
try
{
AClient kvitt = s.TransferClient(client);
}
catch(Exception e)
{ }
}
不知道它是否相关,但我的App.config设置为绑定:
<netTcpBinding>
<binding name="netTcpBinding" closeTimeout="01:01:00" openTimeout="01:01:00" receiveTimeout="01:01:00" sendTimeout="01:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="5242880" maxBufferSize="5242880" maxConnections="15" maxReceivedMessageSize="5242880">
<readerQuotas maxDepth="64" maxStringContentLength="52428800" maxArrayLength="16384" maxBytesPerRead="8192" maxNameTableCharCount="163840" />
<reliableSession ordered="true" inactivityTimeout="01:01:00" enabled="false" />
<security mode="None">
<transport clientCredentialType="None" />
<message clientCredentialType="None"/>
</security>
</binding>
</netTcpBinding>
在调试中,我看到了这一点(右侧是客户端,离开了服务): http://imgur.com/vZvDB8S
红线包含实际数据,我不得不将它们删除,因为它们是个人数据所以^^
所以我的问题是,有没有人知道为什么我会回复&#34;空白&#34;服务端的对象,当我知道我发送的对象包含数据的事实?我哪里出错了? 我希望我能够覆盖所有需要的数据,如果有任何遗漏,请告诉我。 感谢您抽出宝贵时间来审核我的问题!
答案 0 :(得分:2)
在我的情况下,问题是客户端和服务器有我自己的数据类版本。只需将客户端的数据类导入服务器就可以解决我的问题。
希望有人在他们的google-fu期间得到一些使用这个答案,并感谢帮助设置我的brian权利!