NetDataContractSerializer и WCF - PullRequest
       15

NetDataContractSerializer и WCF

7 голосов
/ 16 сентября 2009

У меня есть сценарий, в котором мне нужно использовать NetDataContractSerializer вместо DataContractSerializer.

До сих пор я использовал этот метод - http://www.pluralsight.com/community/blogs/aaron/archive/2006/04/21/22284.aspx - который выглядит довольно простым, но в соответствии с этим http://social.msdn.microsoft.com/forums/en-US/wcf/thread/cb0c56c0-3016-4cda-a3c7-8826f8cc5bb0/ подход неверен.

Взгляд вокругчуть больше я нашел следующее - http://social.msdn.microsoft.com/forums/en-US/wcf/thread/f30ecd17-cac0-4cdc-8142-90b5f411936b/

В основном вам нужно выполнить следующее:

Так вот, что у меня есть на стороне клиента:

ChannelFactory<IPersonService> factory = new ChannelFactory<IPersonService>("WSHttpBinding_IPersonService");

foreach (OperationDescription desc in factory.Endpoint.Contract.Operations)
{
    DataContractSerializerOperationBehavior dcsOperationBehavior = desc.Behaviors.Find<DataContractSerializerOperationBehavior>();
    if (dcsOperationBehavior != null)
    {
        int idx = desc.Behaviors.IndexOf(dcsOperationBehavior);
        desc.Behaviors.Remove(dcsOperationBehavior);
        desc.Behaviors.Insert(idx, new NetDataContractSerializerOperationBehavior(desc));
        //return true;

    }       
}


IPersonService svc = factory.CreateChannel();

А на стороне сервера:

myServiceHost = new ServiceHost(typeof(PersonService), baseAddress);


foreach (ServiceEndpoint endPoint in myServiceHost.Description.Endpoints)
{
    foreach (OperationDescription desc in endPoint.Contract.Operations)
    {
        DataContractSerializerOperationBehavior dcsOperationBehavior = desc.Behaviors.Find<DataContractSerializerOperationBehavior>();
        if (dcsOperationBehavior != null)
        {
            int idx = desc.Behaviors.IndexOf(dcsOperationBehavior);
            desc.Behaviors.Remove(dcsOperationBehavior);
            desc.Behaviors.Insert(idx, new NetDataContractSerializerOperationBehavior(desc));
            //return true;
        }
    }
}

myServiceHost.Open();

Проблема заключается в том, что я использую созданные прокси-серверы службы VS и стандартные службы VS.svc.Поэтому я не контролирую создание клиентского прокси или службы, и приведенный выше код предполагает это.

В одном из комментариев в посте упоминается, что вы сможете реализовать «IServiceBehavior, а в другом - IClientBehavior», но я понятия не имею, как выполнить приведенный выше код и изменить его.У кого-нибудь есть идеи ???

Ура Энтони

...