3

我创建了一个 WCF 服务,它不使用 app.config 来配置自身。但是,在某些 PC 上构建 ServiceHost 对象需要三到四分钟。认为我的服务有问题,我构建了一个简单的 Hello, World 服务并尝试了它。我有同样的问题。

根据分析器的说法,所有这些时间都花在了读取服务的配置上。

所以我真的有两个问题。

  1. 是否可以禁用从 XML 读取配置?

  2. 更重要的是,有谁知道为什么这可能会花费如此多的时间?

这是示例服务:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    string GetString();
}

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class MyService : IMyService
{
    public string GetString()
    {
        return "Hello, world!";
    }
}

class Program
{
    static void Main(string[] args)
    {
        Uri epAddress = new Uri("http://localhost:8731/Test");
        Uri[] uris = new Uri[] { epAddress };

        MyService srv = new MyService();
        ServiceHost host = new ServiceHost(srv, uris);  // this line takes 3-4 minutes

        host.AddServiceEndpoint(typeof(IMyService), new WSHttpBinding(), "Test");
        ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
        smb.HttpGetEnabled = true;
        host.Description.Behaviors.Add(smb);

        host.Open();

        return;
    }
}

出于设计原因,我需要创建服务并将其作为对象传递,而不是作为类型传递。

如果有更多信息可以使用,请告诉我。

非常感谢。

4

3 回答 3

1

服务器是否连接到互联网?

如果没有,请尝试以下操作:

  1. 打开 Internet Explorer
  2. 工具 -> Internet 选项 -> 高级选项卡
  3. 向下滚动到安全并禁用“检查发布者的证书吊销”和“检查下载程序的签名”

在某些情况下,这样做会加快 PC 上许多看似无关的进程,包括不同 ms 程序(尤其是 Visual Studio)的通信和启动速度。

于 2009-10-16T12:32:36.897 回答
0
  1. 是否可以禁用从 XML 读取配置?

不 - 但如果你是自托管的,你可以随时删除 app.config 文件,或者只是<system.serviceModel>在你的 app.config/web.config 中没有该部分。

  1. 更重要的是,有谁知道为什么这可能会花费如此多的时间?

不,我没有 - 但我看到您正在使用默认的 wsHttpBinding。

问题是:这对所有绑定的行为是否相同?wsHttpBinding 是一个相当重量级的绑定,支持很多特性。

basicHttpBinding您是否看到使用例如 the或 the时所花费的时间相同netTcpBinding

马克

于 2009-10-16T12:56:04.227 回答
0

如果某事在没有任何明显原因的情况下花费很长时间,则通常是有一些锁定并且它正在等待超时。

我猜这与端口 8731 有关。

  • 你在那个端口上还有其他东西在听吗?
  • 您是否有可能给您带来问题的防火墙?
于 2009-10-16T13:02:14.387 回答