ProtoBuf WCF“未分配模型实例”

Posted

技术标签:

【中文标题】ProtoBuf WCF“未分配模型实例”【英文标题】:ProtoBuf WCF "No Model instance has been assigned" 【发布时间】:2013-06-18 15:58:16 【问题描述】:

我收到此错误:

没有模型实例被分配给 ProtoOperationBehavior

我刚刚在 Visual Studio 中使用了 WCF 模板应用程序来查看是否可以运行它。如何解决此错误?

代码

public class Service1 : IService1

    public string GetData(int value)
    
        return string.Format("You entered: 0", value);
    

    public CompositeType GetDataUsingDataContract(CompositeType composite)
    
        if (composite == null)
        
            throw new ArgumentNullException("composite");
        
        if (composite.BoolValue)
        
            composite.StringValue += "Suffix";
        
        return composite;
    


[ServiceContract]
public interface IService1


    [OperationContract]
    [ProtoBehavior()]
    string GetData(int value);

    [OperationContract]
    [ProtoBehavior()]
    CompositeType GetDataUsingDataContract(CompositeType composite);



[DataContract]
[ProtoBuf.ProtoContract]
public class CompositeType

    bool boolValue = true;
    string stringValue = "Hello ";

    [DataMember(Order = 1)]
    [ProtoBuf.ProtoMember(1)]
    public bool BoolValue
    
        get  return boolValue; 
        set  boolValue = value; 
    

    [DataMember(Order = 2)]
    [ProtoBuf.ProtoMember(2)]
    public string StringValue
    
        get  return stringValue; 
        set  stringValue = value; 
    

app.config:

<services> 
<service name="ProtoBufService.Service1"> 
    <host> 
        <baseAddresses> 
            <add baseAddress="net.tcp://localhost:9086/ProtoBufService/Service1/" />
        </baseAddresses>
    </host> 
    <endpoint address="basic" 
        binding="netTcpBinding" contract="ProtoBufService.IService1" 
        behaviorConfiguration="protoEndpointBehavior">         
    </endpoint> 
    <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>     
</service> 
</services>
<extensions> 
    <behaviorExtensions> 
         <add name="protobuf" 
            type="ProtoBuf.ServiceModel.ProtoBehaviorExtension, 
            protobuf-net, Version=2.0.0.640, 
            Culture=neutral, PublicKeyToken=257b51d87d2e4d67" />     
     </behaviorExtensions> 
</extensions>

<endpointBehaviors>
    <behavior name="protoEndpointBehavior">
        <protobuf />
    </behavior>
</endpointBehaviors>

【问题讨论】:

这是哪个框架等?您到底使用了哪个 protobuf-net DLL?努吉特?谷歌代码?如果谷歌代码:哪个变种? “满的”?仅核心? 我正在使用 ProtoBuf 2.0.0.640"。最新版本发布在 google 代码上。我尝试使用 nuget。那不起作用。然后我尝试使用 google 代码版本(Core,net30 程序集) ,同样的错误。我在 Windows 7 x86 上使用带有 AppFabric 的 IIS 7.5 进行测试。感谢您的帮助。 Framework 4.5 Full,不是客户端。 【参考方案1】:

我尝试使用 nuget。那没用。

我很想了解更多关于您在那里遇到的问题

然后我尝试使用谷歌代码版本(Core,net30 程序集),同样的错误。

“仅核心”库不包含元编程层 - 它旨在与预生成的序列化程序集一起使用。因此,没有默认模型 - 必须始终提供一个。

这里最简单的“修复”就是使用库的“完整”构建;这将元编程模型作为默认模型。

【讨论】:

以上是关于ProtoBuf WCF“未分配模型实例”的主要内容,如果未能解决你的问题,请参考以下文章

带有 Protobuf-net 的端点行为配置 WCF

WCF Rest 服务和 protobuf-net

在 WCF 服务中使用 protobuf

Protobuf.net WCF 反序列化列表<T>

如何避免在 protobuf 上的 WCF 中有重复的对象

对 protobuf-net WCF 的使用感到困惑