2010-10-29 3 views
1

donc, je ai quelque chose comme ça (?): il y a une application ASP.NET (1) qui fait référence àservice WCF (2) qui fait référence à.NET demande (3). (1) crée une requête (2), (2) obtient des informations de (3), les traite et les renvoie à (1).ASP.NET pour problème de sérialisation WCF

Et voici le problème - il existe une classe DataContract pour la requête (utilisée par (2) et (1)) qui contient un objet DateTime. Quand ce DateTime est assigné en (1), tout va bien. Mais quand une méthode de ServiceContract est appelée avec cet objet de demande, (2) voit cet objet comme nul (est DateTime était nullable), ou 1/1/0001. String et Ints fonctionnent très bien. Aucune exception n'est levée. CultureInfos sont différents sur (1) et (2) et il doit rester de cette façon. L'utilisation de DateTime.SpecifyKind() n'aide pas.

Je ne veux pas tricher et envoyer DateTime en tant que chaîne, mais c'est juste stupide.

Est-ce un problème de sérialisation? Si oui, comment le résoudre?

Je suis tout à fait nouveau à cela, si ... s'il vous plaît, soyez doux; [ Merci

MISE À JOUR

config service:

<service behaviorConfiguration="eServiceX.eServiceXInterfaceBehavior" name="eServiceX.ServiceXInterface"> 
      <endpoint address="" binding="basicHttpBinding" contract="eServiceXCommon.IeXService"></endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
      <host> 
      <baseAddresses> 
       <add baseAddress="http://localhost:8732/eServiceX"/> 
      </baseAddresses> 
      </host> 
</service> 
.. 
<behavior name="eService.eServiceXInterfaceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
</behavior> 

données Contrat:

[DataContract] 
public class GetXRequest : Request 
{ 
     private string _name; 
     private DateTime _date; 
     [DataMember] 
     public string Name 
     { 
      get { return _name; } 
      set { _name = value; } 
     } 
     [DataMember] 
     public DateTime DateTime 
     { 
      get { return this._date; } 
      set { this._date = value; } 
     } 
} 

... et le problème p arts:

// ASP.NET app side: 
X = new eService.ServiceXInterface(); 
eService.GetXRequest rq = new eService.GetXRequest(); 
rq.Name = "Blar"; 
rq.Date = SomeDay; 
eService.GetXResponce Getter = X.GetX(rq); //here rq.Name is "Blar"; rq.Date is SomeDay 

//.. 
// WCF service side: 

[ServiceContract(Name = "IeXService")] 
public interface IeXService 
{ 
    [OperationContract] 
    GetXResponce GetX(GetXRequest request); 
} 

public GetXHResponce GetX(GetXRequest request) 
{ 
    doSMTH(request.Name, request.Date); //here request.Name is "Blar", but Date's value is 1/1/0001 
    //.. 
} 
+0

Ce n'est pas improbable, je le ferais poster le contrat de données (parties importantes) et le service. – steinar

+0

voir mise à jour, merci .. – exp

Répondre

2

Si quelqu'un est intéressé, il était mon mauvais = [ je définissais référence Web au lieu de service de référence = [ alors ... ouais ... mistery résolu