C# 无法通过wcf向mvc公开mongodb objectId

C# 无法通过wcf向mvc公开mongodb objectId,c#,asp.net-mvc,mongodb,wcf,datacontractserializer,C#,Asp.net Mvc,Mongodb,Wcf,Datacontractserializer,我在提供wcf服务时遇到了一个恼人的问题。我熟悉wcf及其用法 服务实施: public class Service : IService { public SampleClass SampleMethod ( SampleClass sampleParameter ) { return new SampleClass { MyProperty1 = Guid.NewGuid(), MyProperty2 = ObjectId.GenerateNewId() };

我在提供wcf服务时遇到了一个恼人的问题。我熟悉wcf及其用法

服务实施:

public class Service : IService
{
    public SampleClass SampleMethod ( SampleClass sampleParameter )
    {
        return new SampleClass { MyProperty1 = Guid.NewGuid(), MyProperty2 = ObjectId.GenerateNewId() };
    }
}
服务接口:

[ServiceContract]
public interface IService
{
    [OperationContract]
    SampleClass SampleMethod ( SampleClass sampleParameter );
}
还有我的合同课:

/// this class is in DataContracts dll - meantioned in the exception
[DataContract]
public class SampleClass
{
    [DataMember]
    public Guid MyProperty1 { get; set; }
    [DataMember]
    public ObjectId MyProperty2 { get; set; }
}
我将接口和合同保存在单独的库项目中,并在客户端使用
dll
s

MVC端调用服务:

static IService Service = new ChannelFactory<IService>(new BasicHttpBinding("regularBinding"), new EndpointAddress(BaseAddress + "Service.svc")).CreateChannel();

public ActionResult Index()
{
    var xyz = Service.SampleMethod(new SampleClass());
    return View();
}
static IService Service=newchannelfactory(new basichttppbinding(“regularBinding”)、newendpointaddress(BaseAddress+“Service.svc”)).CreateChannel();
公共行动结果索引()
{
var xyz=Service.SampleMethod(新的SampleClass());
返回视图();
}
我可以从单元测试项目或桌面应用程序调用此服务。但当我从MVC应用程序调用该服务时,它会抛出
ProtocolException

mscorlib.dll中发生“System.ServiceModel.ProtocolException”类型的异常,但未在用户代码中处理

其他信息:格式化程序在尝试反序列化消息时引发异常:尝试反序列化参数时出错。InnerException消息是“第1行位置451出错”命名空间“”中不应包含EndElement“”MyProperty2“”。应为元素“\u增量”。有关更多详细信息,请参阅InnerException

我有一种预感,这是由一些与序列化程序相关的问题引起的,但我对这些主题没有深入的理解,所以我就在这里

这种行为的原因可能是什么?如何在不改变数据结构的情况下克服这一问题

更新


顺便说一句,我意识到异常发生在返回时。当我从服务方法中抛出异常时,该异常将传播给客户端。因此,我可以说,我的带有
ObjectId的请求可以从服务中收到,但不能返回给客户。

我们已经在与@jpgrassi的讨论中找到了问题和解决方案,但由于@jpgrassi太谦虚,无法发布答案,我就在这里


按照@jeff的答案,我非常激动,以至于我检查了
MongoDB.Bson
dll的版本。就是这样,它们在服务器和mvc客户端上是不同的,导致了这个问题。在版本上升级解决了问题。

我猜客户端不知道如何反序列化objectId,因为它驻留在MongoDB.Bson.dll上?尝试这样装饰ObjectId属性:[BsonId][BsonRepresentation(BsonType.ObjectId)]公共字符串MyProperty2{get;set;}MongoDB.Bson.dll已包含在客户端中-以及所有其他MongoDB dll。让我试试你的建议。可惜不行。我已经仔细检查了armful hopes,但是没有。您可以发布来自MVC应用程序的代码调用吗?