2009-12-16 81 views
2

我正在通過套接字傳遞用戶定義的類。 SendObject代碼如下。它在我的本地機器上工作,但是當我發佈到WebServer時,它隨後在我自己的機器上與App Server進行通信,但它失敗。二進制流'NN'不包含有效的BinaryHeader

public bool SendObject(Object obj, ref string sErrMsg) 
    { 
     try 
     { 
      MemoryStream ms = new MemoryStream(); 
      BinaryFormatter bf1 = new BinaryFormatter(); 
      bf1.Serialize(ms, obj); 
      byte[] byArr = ms.ToArray(); 
      int len = byArr.Length; 
      m_socClient.Send(byArr); 
      return true; 
     } 
     catch (Exception e) 
     { 
      sErrMsg = "SendObject Error: " + e.Message; 
      return false; 
     } 
    } 

我能做到這一點很好,如果它是在我的工具項目一類約的UserData另一類只是不想知道。令人沮喪!

哦。我認爲這是因爲UserData類裏面有一個DataSet。有趣的是,我已經看到了這項工作,但是在1次請求之後它變得糟糕,我無法再重新開始工作。

任何人都知道這可能是爲什麼?我已經研究過比較dll以確保它們在WebServer和本地計算機上相同,並且它們看起來像我在AssemblyInfo.cs中打開版本控制以進行仔細檢查。

可能的原因是序列化和反序列化之間無效的流或對象版本更改。


編輯

好吧,似乎這個問題是與大小。如果我把它保留在1024以下(我在這裏猜測),它可以在Web服務器上工作,並且不會在它內部有一個DataSet的情況下使用。事實上,這非常令人費解,我使用ds.GetXml將DataSet轉換爲字符串),這也會導致它爆炸。 :(如此看來,在網絡上的東西與我的插座是錯誤的,不希望在數據讀取

回答

相關問題