2017-10-26 15 views
0

AutoMapper(6.1.1.0)を使用してEntity FrameworkモデルとDTOモデルをマッピングし、クライアントアプリケーションに送信するシンプルなWCFサービスがあります。 AutoMapperは初めてのものです。Automapper WCFサーバー公開後のエラーマッピングタイプ

IIS Expressでローカルに実行されているWCFサービスを使用して開発マシンを開発しており、今日はWCFサービスをオンラインサーバーに公開し、すべて構成しました。私はWCFテストクライアントを使用してWCF SVCにアタッチすることができ、利用可能なメソッドから応答を得ることができます。これらのメソッドの中にはAutoMapperを使用するものと、そうでないものがあります。

私は 'main'関数を取得して応答を得ようとしたときに、DTOクラスの1つであるプロパティの1つで 'Error mapping types'エラーが発生しました。

これは、私が手にエラーが '資格証明書' がちょうど

[DataContract] 
public class CredentialsDTO 
{ 
    [DataMember] 
    public int agency_id { get; set; } 

    [DataMember] 
    public string cf_username { get; set; } 

    [DataMember] 
    public string cf_password { get; set; } 

    [DataMember] 
    public string cf_agent_id { get; set; } 

    [DataMember] 
    public string cf_booker_id { get; set; } 
} 

の最大過度に困難なので、何も行われません

Error mapping types. 

Mapping types: 
agency_detail -> AgencyDetailDTO 
ConfigWCFSA.agency_detail -> 
ConfigSharedModels.AgencyDetailDTO 

Type Map configuration: 
agency_detail -> AgencyDetailDTO 
ConfigWCFSA.agency_detail -> 
ConfigSharedModels.AgencyDetailDTO 

Property: 
credentials 

ある親クラス

[DataContract] 
public class AgencyDetailDTO 
{ 
    public AgencyDetailDTO() 
    { 
     credentials = new CredentialsDTO(); 
     son_blacklist = new List<SONBlacklistDTO>(); 
    } 

    [DataMember] 
    public int id { get; set; } 

    [DataMember] 
    public string pcc { get; set; } 

    [DataMember] 
    public string name { get; set; } 

    [DataMember] 
    public string gds { get; set; } 

    [DataMember] 
    public string default_currency { get; set; } 

    [DataMember] 
    public bool test { get; set; } 

    [DataMember] 
    public CredentialsDTO credentials { get; set; } 

    [DataMember] 
    public List<SONBlacklistDTO> son_blacklist { get; set; } 
} 

で、 AutoMapperにプロパティを無視するように指示しても、他のすべてのプロパティをマッピングするのに問題はありません(もっと多くのLisがあります私はスペースを節約するために上記の 'AgencyDetailDTO'クラスをやめました)。

私はこれがすべて私の開発マシン上で完璧に動作していると言います。このマッピングの問題はWebサーバー(Win Svr 2012 IIS 8)上にあります。

私はすべての様々なクラス間のマッパーの設定を作成している(とEFモデル内のすべてのプロパティ名は私のDTOのものと一致して、私はReverseMapを(使用している)必要な場合ので、かなり確信して、私は

を修正するものをすべて持っています根本的な原因何ができるかに
var config = new MapperConfiguration(cfg => 
     { 

      cfg.CreateMap<credentials, CredentialsDTO>().ReverseMap();     
      cfg.CreateMap<agency_detail, AgencyDetailDTO>().ReverseMap(); 
     }); 

任意のアイデア?

乾杯 ポール

これは、WCFサービス(そのために残念)

からの完全な誤りでありますここで要求されているよう
Error mapping types. 

Mapping types: 
agency_detail -> AgencyDetailDTO 
ConfigWCFSA.agency_detail -> 
ConfigSharedModels.AgencyDetailDTO 

Type Map configuration: 
agency_detail -> AgencyDetailDTO 
ConfigWCFSA.agency_detail -> 
ConfigSharedModels.AgencyDetailDTO 

Property: 
credentials 

Server stack trace: 
    at 
System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood 
(Message reply, MessageFault fault, String action, MessageVersion 
version, FaultConverter faultConverter) 
    at 
System.ServiceModel.Channels.ServiceChannel.HandleReply 
(ProxyOperationRuntime operation, ProxyRpc& rpc) 
    at 
System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) 
    at 
System.ServiceModel.Channels.ServiceChannelProxy.InvokeService 
(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 
    at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) 

Exception rethrown at [0]: 
    at 
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage 
(IMessage reqMsg, IMessage retMsg) 
    at 
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke 
(MessageData& msgData, Int32 type) 
    at IConfigService.GetAgencyConfiguration(String pcc, String gds) 
    at ConfigServiceClient.GetAgencyConfiguration(String pcc, String gds) 

は、EFは

public partial class agency_detail 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public agency_detail() 
    { 
     this.son_blacklist = new HashSet<son_blacklist>(); 
    } 

    public int id { get; set; } 
    public string pcc { get; set; } 
    public string name { get; set; } 
    public string gds { get; set; } 
    public string default_currency { get; set; } 
    public bool test { get; set; } 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<son_blacklist> son_blacklist { get; set; } 

    public virtual credentials credentials { get; set; } 
} 
+0

さらに詳しいエラー情報があります。より完全なエラーダンプを投稿してください。 – JuanR

+0

私の推測では、サービスがこのフィールドを返さない可能性があります。サービス定義を再確認してください。 – JuanR

+0

サービス参照が古くなっている可能性があります。 – JuanR

答えて

0

最後に、数時間デバッグした後、私たちは答えを見つけました!データベースには資格テーブルで「常に暗号化されている」ために2つの列がオンになっていましたが、ライブサーバーには(別のマシンで作成されたように)解読する正しいキーがありませんでした。

AutoMapperでは問題が発生していませんでした。これは「スタックをさらに進化させました」で、一部のリモートデバッガを接続した後、最終的に元の犯人に戻りました。

ご意見ありがとうございました

0

問題がCredentialsDTOとDEVとPRODマシン間の差であるagency_detailクラスを生成しました。

DLLがCredentialsDTOを含むで始まる、問題は次のようになります。

  • それはそれ自身のdllであり、そしてこのDLLへのアクセスに問題があり、または上でこのDLLの古いバージョンがありますPRODサーバ
  • PRODマシンは最新バージョン

異なるGACでCredentialsDTOのコピーを持っている私は、名前を変更CredentialsDTOと資格情報を使用して起動してから再デプロイします。

関連する問題