gpt4 book ai didi

c# - 接口(interface)/契约(Contract)中的 WCF HttpWebResponse 对象序列化

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:05 25 4
gpt4 key购买 nike

我即将完成允许我“远程”数据库调用的 WCF 服务。我们契约(Contract)中的一项是能够远程发出 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”。

我猜这个异常与我没有正确序列化接口(interface)定义中的 HttpWebResponse 对象有关。我可能是错的。如果您能就如何使它正常工作提供帮助,我将不胜感激。

附带说明一下,当我创建服务引用时,它会切换我的参数。客户端 Reference.cs 文件显示了这样的方法:

public bool DoWebRequest( out HttpWebResponse resp, string url )
{
return base.Channel.DoWebRequest( out resp, url );
}

有什么想法吗?这是唯一具有切换参数的方法。这可能是问题的一部分吗?不过,我不明白为什么该工具会这样做。

再次感谢。

最佳答案

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

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

关于c# - 接口(interface)/契约(Contract)中的 WCF HttpWebResponse 对象序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5264130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com