C# 接口/合同中的WCF HttpWebResponse对象序列化

C# 接口/合同中的WCF HttpWebResponse对象序列化,c#,.net,wcf,serialization,C#,.net,Wcf,Serialization,我刚刚完成一个WCF服务,它允许我“远程”数据库调用。我们合同中的一项内容是能够远程发送HTTP请求 以下是界面: [Operation_Contract()] bool DoWebRequest( string url, out HttpWebResponse resp ); with the implementation (more or less -- no error reporting here): public bool DoWebRequest( string url, out

我刚刚完成一个WCF服务,它允许我“远程”数据库调用。我们合同中的一项内容是能够远程发送HTTP请求

以下是界面:

[Operation_Contract()]
bool DoWebRequest( string url, out HttpWebResponse resp );

with the implementation (more or less -- no error reporting here):

public bool DoWebRequest( string url, out HttpResponse resp )
{
   bool done = false;
   resp = null;

   WebRequest req = WebRequest.Create( url );
   resp.Credentials = CredentialCache.DefaultCredentials;
   resp = (HttpWebResponse )req.GetResponse();
   done = ( resp != null ? true : false );

   return done;
}
然后,我将其包装在一个WCFServiceLibrary中,将其托管在一个控制台应用程序中,在另一个应用程序中创建一个服务引用,并向其提供一个客户端。然后我将客户机包装在另一个类中,并通过client.DoWebRequest(url,out resp)调用它

我所有的数据访问工具都能正常工作。但是,当我尝试在测试应用程序中使用它时,我得到以下结果:

套接字连接已中止。这可能是由于处理消息时出错、远程主机超过接收超时或基础网络资源问题造成的。本地套接字超时为“00:00:59.7180000”。

我猜这个异常与我没有在接口定义中正确序列化HttpWebResponse对象有关。不过我可能错了。我很感激你能帮我解决这个问题

作为旁注,当我创建服务引用时,它切换了我的参数。client Reference.cs文件显示如下方法:

public bool DoWebRequest( out HttpWebResponse resp, string url )
{  
   return base.Channel.DoWebRequest( out resp, url );
}
你知道为什么吗?这是唯一一种切换参数的方法。这可能是问题的一部分吗?不过,我不明白为什么这个工具会这样做


再次感谢。

毫无疑问,HttpWebResponse对象包含的信息仅在其来源的机器上有效,例如为请求提供服务的网络流。这些信息序列化没有意义


您应该抽象出Web请求和Web响应的含义,并创建与这些抽象匹配的对象。

实际上,使用新方法发回响应流似乎是可行的。我还没有让它完全工作,因为流大于默认的接收大小。我已经在所有配置设置中更改了它,但仍然有一个问题。。。。谢谢