Wcf服务仅在传输复杂对象上接收null

时间:2014-11-26 12:30:37

标签: c# wcf object service

我对整个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;服务端的对象,当我知道我发送的对象包含数据的事实?我哪里出错了? 我希望我能够覆盖所有需要的数据,如果有任何遗漏,请告诉我。 感谢您抽出宝贵时间来审核我的问题!

1 个答案:

答案 0 :(得分:2)

在我的情况下,问题是客户端和服务器有我自己的数据类版本。只需将客户端的数据类导入服务器就可以解决我的问题。

希望有人在他们的google-fu期间得到一些使用这个答案,并感谢帮助设置我的brian权利!