Webservice - 操作已超时

我正在从事的项目如下:我有一个加密数据的 Java Web 服务(Des、3Des)。数据是从 C# 应用程序发送的。我想加密/解密大小为 1MB 的文件。我会得到一个例外。

该文件以位格式放入 byte[] 中,并发送到 Java Web 服务以进行加密/解密。在 web 服务完成之后,它需要将加密/解密的数据发回。

对于小文件,我没有问题,但大小为 1MB 或更大的文件在 C# 应用程序中引发异常,错误具有以下消息: WebException was unhandled: The operation has timed out

大约在:1min40sec 后抛出此错误

我在 StackOverflow 上阅读过不同的帖子,但它们似乎总是与 WebRequest 和 WebResponse 一起使用。我没有使用它,我用来调用我的网络服务的代码是:

public byte[] TEncode(byte[] input, byte[] key)
{
    return _webservice.TDesEncode(input, key);
}

有没有人建议我可以做些什么来解决这个问题?

编辑 尝试增加 app.config 文件中的会话超时,例如:

<system.web>
<sessionState timeout="20"></sessionState>
</system.web>

在此先感谢马丁

stack overflow Webservice - Operation has timed out
原文答案

答案:

作者头像

听起来你需要增加超时。查看这个 site 以获得解释和可能的修复。

作者头像

尝试在本地调用编码函数并测量它需要多少时间进行编码,尝试使用最大允许的文件大小来获得最坏的情况。

如果时间最适合您 - 将服务超时增加到该值。

如果不是 - 优化编码功能或在客户端/服务器端进行编码并传输已加密的文件可能是明智之举。

从安全角度来看,最后一种方法更好,因为在您的示例中,您将未加密的字节数组传递给可能的远程服务 - 在这种情况下,它很容易受到网络流量嗅探的攻击。

作者头像

我认为您需要检查是否在数据到达服务主机的流式传输时间内导致超时,或者实际加密时间是否太长。如果是加密,您可能需要修改它。

我知道您正在使用 1MB 进行测试,但是,如果您在 LAN 上使用千兆以太网运行它,则在 1GB 时,在良好的网络上,将请求发送到服务主机至少需要 10-15 秒.

作者头像

希望下面的代码能工作..

var objNotificationCreation = new BS_INTELATRAC_DES_SI_Intelatrac_NotificationCreation_InS
{
Credentials = new NetworkCredential("user name","password")//if needed,
Timeout=int.MaxValue
};