我有經過來回以下DataContracts WCF服務:WCF的Guid數據成員沒有序列號正確
[DataContract] public class RequestWrapper { [DataMember] public FooDataContract FooDataContract; } [DataContract] public class ResponseWrapper { [DataMember] public FooDataContract FooDataContract; } [DataContract] public class FooDataContract { public FooDataContract(string data, Guid id) { Data = data; ID = id; } [DataMember] public string Data { get; set; } [DataMember] public Guid ID { get; set; } }
它是通過代理類調用是這樣的:
void CallService(string data) { var id = Guid.NewGuid(); var response = proxy.CallService(new RequestWrapper { new FooDataContract(data, id); }); }
這隨後被傳遞(通過服務)通過使用EF的存儲庫到數據庫:
public void RepoMethod(FooDataContract foo) { var guid = foo.ID; // - Breakpoint here shows all zeros! efContext.DoSomething(foo.Data, foo.ID); }
以下是服務電話:
public ResponseWrapper CallService(RequestWrapper request) { var foo = request.FooDataContract; repository.RepoMethod(foo); var response = new ResponseWrapper{ FooDataContract = foo }; return response; }
這裏的代理:
public class Proxy : IMyService { static readonly ChannelFactory<IMyService> channelFactory = new ChannelFactory<IMyService>("IMyService"); ResponseWrapper CallService(RequestWrapper request) { return channelFactory.UseService(s => s.CallService(request)); } } internal static class UseServiceFunction { internal static R UseService<T, R> (this ChannelFactory<T> channelFactory, Func<T, R> useService) { var service = channelFactory.CreateChannel(); try { R response = useService(service); return response; } finally { var channel = service as ICommunicationObject; try { if (channel.State != CommunicationState.Faulted) channel.Close(); } catch { channel.Abort(); } } } }
我把手錶上的GUID在VS調試器。從客戶端Web應用程序調用服務時,生成的Guid是看似隨機的十六進制字符的有效Guid。太好了,那是工作。
但是,當數據序列化,通過電線,並出現在另一側(在我的存儲庫),Guid全部爲零!
我已經雙倍,三重檢查Guid確實標有[DataMember]屬性。我想知道是否額外的DataContract層(如何使用RequestWrapper數據約定包裝FooDataContract)導致序列化問題?
您可以在您的WCF服務中提供調用repo方法的代碼嗎? – Suhas