2011-08-12 48 views
-1

Possible Duplicate:
HttpWebRequest Won't Serialize无法序列HttpWebRequest的(类型“System.Net.WebRequest + WebProxyWrapper”未标记为可序列化。)

为了记录我试图序列System.Net的实例一些HTTP流量。 HttpWebRequest的。应用程序使用MVC 3,问题代码位于控制器类的操作方法中。

在.NET框架4它的类是documented为可序列:

[SerializableAttribute] 
    public class HttpWebRequest : WebRequest, 
     ISerializable 

以下测试代码失败在所指示的语句:

... 
HttpWebRequest preapprovalRequest = (HttpWebRequest)WebRequest.Create("http://big.URL.here"); 
... 
HttpWebResponse preapprovalResponse = (HttpWebResponse)preapprovalRequest.GetResponse(); 


// Serialize the request context. 
IFormatter formatter = new BinaryFormatter(); 
MemoryStream msRequest = new MemoryStream(); 
formatter.Serialize(msRequest, preapprovalRequest); //<<<<< Error here. 
// Reset the stream and deserialize. 
msRequest.Seek(0, SeekOrigin.Begin); 
HttpWebRequest duplicateRequest = (HttpWebRequest)formatter.Deserialize(msRequest); 
msRequest.Close(); 

// Serialize the response context. 
MemoryStream msResponse = new MemoryStream(); 
formatter.Serialize(msResponse, preapprovalResponse); 
// Reset the stream and deserialize. 
msResponse.Seek(0, SeekOrigin.Begin); 
HttpWebResponse duplicateResponse = (HttpWebResponse)formatter.Deserialize(msResponse); 
msResponse.Close(); 

报告的错误是:

Type 'System.Net.WebRequest+WebProxyWrapper' in Assembly 
'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 
is not marked as serializable. 

我试过追逐WebProxyWrapper没有喜悦。只是一些无益的行李。显式铸造的HttpWebRequest的WebRequest的不改变错误:

formatter.Serialize(msRequest, (WebRequest)preapprovalRequest); 

在光明的一面,代码不正确序列化和反序列化HttpWebResponse实例。

我怎么能失去了包装?有更好的方法吗?

+0

答案是*您不能序列HttpWebRequest和你不应该这样做。* **的**真正的问题涉及到*为什么*您正试图做到这一点。 – Will

+0

当发生错误或意外事件时,记录我的请求和PayPal的回复似乎并不合理,例如一个新的名称/值对,回来了回应。试图序列化记录为具有[SerializableAttribute]的东西似乎也不合理。你是否在暗示微软可能在他们的文档中犯了错误? – HABO

+0

但是你没有序列化这个类,就像你发现的那样。你正在序列化别的东西。可以从请求中获取字节并保存这些*,这实质上就是您希望在没有序列化请求/响应对象的开销的情况下执行的操作。 – Will

回答

0

给这一个镜头:

[Serializable()] 
public class MyClass 
{ 
    //your serializable class 
} 
+0

问题实例是一个方法中的变量,而不是另一个类的属性。 (HttpWebRequest的preapprovalRequest =(HttpWebRequest的)WebRequest.Create( “http://horrific.URL.here”); )的方法,是在MVC控制器的动作。在控制器类上尝试[Serializable]不会改变结果。我也不期望它实际上是可序列化的。 – HABO

+0

错误似乎表明包装未标记为可序列化。你能提供更多的背景吗? –

+0

为了缩小话语范围,我将测试代码移至最小控制台应用程序。错误没有改变,这导致我相信这不可能是我的课程中的一个问题。通过上下文:代码构建一个发送到PayPal的HTTP请求,如果没有发现它,则生成并返回响应。由于PayPal有时会做不可预测的事情,所以我希望能够记录一些特殊情况。就是这样。 – HABO

相关问题