从Web服务返回自定义对象需要很长时间,为什么

时间:2012-12-05 17:23:57

标签: c# .net web-services return-value custom-object

当我的Web服务返回一个自定义对象(只包含四个字符串,三个整数和一个bool)时,它需要几秒钟(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之间的区别仅在于return语句:

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

1 个答案:

答案 0 :(得分:1)

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

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