1

当我的 Web 服务返回一个自定义对象(仅包含四个字符串、三个整数和一个布尔值)时,它需要几秒钟(4-8 秒)。当同一台服务器以字符串形式发送相同的信息时,它几乎会立即发送。

如果重要的话,自定义对象类在同一个 Web 服务中定义。

我不认为它会有那么大的不同,还是我错过了一些基本的东西?

编辑:一些代码,我删除了一些变量以便于阅读。

Web 服务中定义的自定义类:

public class AddressSearchResult
{
    public AddressSearchResult()
    {
        Address = String.Empty;
        Country = String.Empty;
    }

    public AddressSearchResult(string address, string country)
    {
        Address = address;
        Country = country;
    }

    public string Address { get; set; }
    public string Country { get; set; }
}

Web 服务上的两个 WebMethod 之间的唯一区别是返回语句:

WebMethod1 返回 obj

return new AddressSearchResult((string)address["address"], (string)address["country"]);

WebMethod2 只返回一个字符串(只是为了表明我在这里做同样的事情)

return new AddressSearchResult((string)address["address"], (string)address["country"]).Address;

接收端,控制台应用程序:

AddressSearchResult result = adrSerWS.method1("example", "yehaa"); //THIS IS SLOW
string result2 = adrSerWS.method2("example", "yehaa"); //THIS IS FAST
4

1 回答 1

1

问题可能是对 Web 服务的第一次调用比后续调用花费的时间更长。尝试切换您在控制台应用程序中进行的服务方法调用的顺序,看看是否method1仍然是最慢的。

为什么第一次通话会更慢?一些想法: 1)在控制台应用程序中,第一个方法调用可能会触发Web服务代理中的一些初始化。这可能是您自己的代码或 .NET 中的内容。2) 在 IIS 空闲一段时间后,您可能会访问 Web 服务,因此它必须生成一个新的工作进程。3) 如果您正在运行带有附加调试器的控制台应用程序,请注意这可能会夸大最坏的性能。尝试在没有调试器的情况下运行。

于 2012-12-05T19:28:08.317 回答