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));
}
}
}
没有找到相关结果
已邀请:
2 个回复
献导外拘
有时WCF会有所帮助,有时会很痛苦(请注意,如果两端都有共享的DTO组件,则工作起来很容易)。 有时WCF会在每个DataMember上给出正确的数字,但以1为准-如果发生这种情况,您可以使用一个微调来告诉protobuf使用带有偏移量的那些数字。
细瑞