0

これが私の問題です。このようにコールバックを呼び出すと、次のようになります。

clients[computerID].PrintLabelCallback(label);   

チャネルに障害が発生し、クライアント側でCommunicationFault例外が発生します。呼び出しが一方向であるため、サーバー側で問題は発生しません。

しかし、私がそれをこのように呼ぶならば:

label.EntryLocation = null;
label.EntryUser = null;
label.ResultLine = null;
label.Printer = null;
label.Type = null;
clients[computerID].PrintLabelCallback(label);

ここで、EntryLocation、EntryUserなどは私が定義したクラスです。String、のような基本的なタイプを無効にする必要はありませんint。それらは何事もなくネットワークを横切って移動します。両側で同じタイプが使われているようですので、どこで失敗しているのかわかりません。

何が原因でしょうか?どうすれば修正できますか?

編集:これが私のクラスと関連フィールドの定義です。

[DataContract(IsReference = true), JsonObject(IsReference = false), Serializable]
public partial class Label : Interfaces.IRQSObject
{

    /// <summary>
    /// The location where the Label was created. 
    /// </summary>
    [DataMember(EmitDefaultValue = false)]
    public virtual Location EntryLocation { get; set; }

    /// <summary>
    /// The user that Generated the Label
    /// </summary>
    [DataMember(EmitDefaultValue = false)]
    public virtual User EntryUser { get; set; }

    /// <summary>
    /// The printer that this label will be printed out at 
    /// </summary>
    [DataMember(EmitDefaultValue = false)]
    public virtual LabelPrinter Printer { get; set; }

    /// <summary>
    /// The Type of the label
    /// </summary>
    [DataMember(EmitDefaultValue = false)]
    public virtual LabelType Type { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public virtual ResultLine ResultLine { get; set; }
}
4

2 に答える 2

0

1つ以上のクラスがまだシリアル化の準備ができていないと思います。

クラスを[DataContract]属性でマークする必要がある場合があり、ワイヤを介して送信する必要があるすべてのメンバーは属性を使用し[DataMember]ます

このような:

[DataContract]
public class PurchaseOrder
{
    [DataMember]
    public Address BillTo {get; set;}
    [DataMember]
    public Address ShipTo {get; set;};
}

このMSDNの記事をご覧ください:シリアル化と逆シリアル化

于 2012-08-27T20:06:04.093 に答える
0

私の問題は、私が提供した情報とはほとんど完全に無関係であることがわかりました。私はNHibernateを使用していますが、この場合Detach、コールバックで渡す前にオブジェクトを忘れていました。これは実際のエラーです(で見つかりましたsvclog):

データコントラクト名が「LocationProxy:http://schemas.datacontract.org/2004/07/」の「LocationProxy」と入力することはできません。DataContractResolverを使用するか、既知のタイプのリストに静的に不明なタイプを追加することを検討してください。たとえば、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知のタイプのリストに追加します。

WCFは、オブジェクトグラフにラベルを付けたときに追加された魔法のNHibernateプロパティについて不平を言っていました。

于 2012-08-27T21:26:20.310 に答える