Protobuf-net WCF响应为空

问题描述

我有一个WCF合同,概述了一种测试方法,该方法仅使用protobuf-net在WCF中返回一个类的实例。我可以在测试应用程序中进行序列化和反序列化,但是当我通过WCF发出请求时,响应存在该类实例,但是其所有属性均为null。 以下是相关的配置文件和类定义:
[ProtoContract]
public class TestClass
{
    [ProtoMember(1)]
    public int TestInt { get; set; }

    [ProtoMember(2)]
    public string TestString { get; set; }
}

...

[ServiceContract]
public interface ITestService
{
    [OperationContract]
    [ProtoBehavior]
    TestClass RunTest(int x);
}

...

<extensions>
    <behaviorExtensions>
        <add name=\"protobuf\" type=\"ProtoBuf.ServiceModel.ProtoBehaviorExtension,protobuf-net,Version=1.0.0.282,Culture=neutral,PublicKeyToken=257b51d87d2e4d67\" />
    </behaviorExtensions>
</extensions>

<endpointBehaviors>
    <behavior name=\"Proto.Default.EndpointBehavior\">
        <protobuf />
    </behavior>
</endpointBehaviors>
<serviceBehaviors>
    <behavior name=\"Proto.Default.ServiceBehavior\">
      <serviceDebug includeExceptionDetailInFaults=\"true\" />
      <serviceMetadata />
      <serviceAuthorization principalPermissionMode=\"None\" />
      <serviceThrottling    maxConcurrentCalls=\"250\"
                            maxConcurrentSessions=\"200\"
                            maxConcurrentInstances=\"10\" />
    </behavior>
</serviceBehaviors>

...

<services>
    <service name=\"WcfTestService\" behaviorConfiguration=\"Proto.Default.ServiceBehavior\">
    <endpoint address=\"\"    binding=\"netTcpBinding\" bindingConfiguration=\"NetTcpBinding_ITestService\"   contract=\"ITestService\" behaviorConfiguration=\"Proto.Default.EndpointBehavior\" />
    <endpoint address=\"mex\" binding=\"customBinding\" bindingConfiguration=\"myMexTcpBinding\" contract=\"IMetadataExchange\" />
    <host>
        <baseAddresses>
            <add baseAddress=\"net.tcp://localhost:2517/TestService\" />
        </baseAddresses>
    </host>
</service>

...

<client>
   <endpoint address=\"net.tcp://localhost:2517/TestService\"
    binding=\"netTcpBinding\" bindingConfiguration=\"NetTcpBinding_ITestService\"
    contract=\"ITestService\" name=\"TestService\"
    behaviorConfiguration=\"Proto.Default.EndpointBehavior\">
    <identity>
        <dns value=\"localhost\" />
    </identity>
</endpoint>
</client>
我可以调试服务,然后看到请求。将创建并返回TestClass对象。我逐步浏览了protobuf-net源代码,并运行了deserialize方法,该方法仅创建了TestClass的空白实例,并遍历了返回的数据,但从未设置任何属性。 哦,我用Mex生成代理。 编辑 这是MEX为TestClass生成的类
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Runtime.Serialization\",\"4.0.0.0\")]
[System.Runtime.Serialization.DataContractAttribute(Name=\"TestClass\",Namespace=\"http://schemas.datacontract.org/2004/07/TestProject\")]
[System.SerializableAttribute()]
public partial class TestClass : object,System.Runtime.Serialization.IExtensibleDataObject,System.ComponentModel.INotifyPropertyChanged {

    [System.NonSerializedAttribute()]
    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private int TestIntField;

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private string TestStringField;

    [global::System.ComponentModel.BrowsableAttribute(false)]
    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
        get {
            return this.extensionDataField;
        }
        set {
            this.extensionDataField = value;
        }
    }

    [System.Runtime.Serialization.DataMemberAttribute()]
    public int TestInt {
        get {
            return this.TestIntField;
        }
        set {
            if ((this.TestIntField.Equals(value) != true)) {
                this.TestIntField = value;
                this.RaisePropertyChanged(\"TestInt\");
            }
        }
    }

    [System.Runtime.Serialization.DataMemberAttribute()]
    public string TestString {
        get {
            return this.TestStringField;
        }
        set {
            if ((object.ReferenceEquals(this.TestStringField,value) != true)) {
                this.TestStringField = value;
                this.RaisePropertyChanged(\"TestString\");
            }
        }
    }

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string propertyName) {
        System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
        if ((propertyChanged != null)) {
            propertyChanged(this,new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}
    

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)